/*
Copyright The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Code generated by applyconfiguration-gen. DO NOT EDIT.

package v1alpha2

// ClusterNetworkPolicyProtocolApplyConfiguration represents a declarative configuration of the ClusterNetworkPolicyProtocol type for use
// with apply.
//
// ClusterNetworkPolicyProtocol describes additional protocol-specific match rules.
// Exactly one field must be set.
type ClusterNetworkPolicyProtocolApplyConfiguration struct {
	// TCP specific protocol matches.
	TCP *ClusterNetworkPolicyProtocolTCPApplyConfiguration `json:"tcp,omitempty"`
	// UDP specific protocol matches.
	UDP *ClusterNetworkPolicyProtocolUDPApplyConfiguration `json:"udp,omitempty"`
	// SCTP specific protocol matches.
	SCTP *ClusterNetworkPolicyProtocolSCTPApplyConfiguration `json:"sctp,omitempty"`
	// DestinationNamedPort selects a destination port on a pod based on the
	// ContainerPort name. You can't use this in a rule that targets resources
	// without named ports (e.g. Nodes or Networks).
	DestinationNamedPort *string `json:"destinationNamedPort,omitempty"`
}

// ClusterNetworkPolicyProtocolApplyConfiguration constructs a declarative configuration of the ClusterNetworkPolicyProtocol type for use with
// apply.
func ClusterNetworkPolicyProtocol() *ClusterNetworkPolicyProtocolApplyConfiguration {
	return &ClusterNetworkPolicyProtocolApplyConfiguration{}
}

// WithTCP sets the TCP field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the TCP field is set to the value of the last call.
func (b *ClusterNetworkPolicyProtocolApplyConfiguration) WithTCP(value *ClusterNetworkPolicyProtocolTCPApplyConfiguration) *ClusterNetworkPolicyProtocolApplyConfiguration {
	b.TCP = value
	return b
}

// WithUDP sets the UDP field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the UDP field is set to the value of the last call.
func (b *ClusterNetworkPolicyProtocolApplyConfiguration) WithUDP(value *ClusterNetworkPolicyProtocolUDPApplyConfiguration) *ClusterNetworkPolicyProtocolApplyConfiguration {
	b.UDP = value
	return b
}

// WithSCTP sets the SCTP field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the SCTP field is set to the value of the last call.
func (b *ClusterNetworkPolicyProtocolApplyConfiguration) WithSCTP(value *ClusterNetworkPolicyProtocolSCTPApplyConfiguration) *ClusterNetworkPolicyProtocolApplyConfiguration {
	b.SCTP = value
	return b
}

// WithDestinationNamedPort sets the DestinationNamedPort field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the DestinationNamedPort field is set to the value of the last call.
func (b *ClusterNetworkPolicyProtocolApplyConfiguration) WithDestinationNamedPort(value string) *ClusterNetworkPolicyProtocolApplyConfiguration {
	b.DestinationNamedPort = &value
	return b
}
