/*
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 v1alpha3

// WorkloadPodGroupSchedulingConstraintsApplyConfiguration represents a declarative configuration of the WorkloadPodGroupSchedulingConstraints type for use
// with apply.
//
// WorkloadPodGroupSchedulingConstraints defines leaf-level scheduling
// constraints, such as topology.
//
// ---
//
// This is a reusable building block meant to be embedded in a controller's own
// API, next to its other scheduling fields (for example, in a Job's
// spec.scheduling). It's recommended to freeze the field after creation
// (+k8s:immutable), since constraints are immutable in the compiled Workload.
// For example,
//
// type JobSchedulingConfiguration struct {
// // SchedulingConstraints defines scheduling constraints (e.g. topology)
// // for the Job's pods.
// // This field is immutable after creation.
// // +optional
// // +k8s:optional
// // +k8s:immutable
// SchedulingConstraints *schedulingv1alpha3.WorkloadPodGroupSchedulingConstraints `json:"schedulingConstraints,omitempty" protobuf:"bytes,N,opt,name=schedulingConstraints"`
//
// // other scheduling fields
// }
type WorkloadPodGroupSchedulingConstraintsApplyConfiguration struct {
	// topology specifies desired topological placements for all pods
	// within the pod group.
	// If unset, no topology placement is requested.
	Topology []TopologyConstraintApplyConfiguration `json:"topology,omitempty"`
}

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

// WithTopology adds the given value to the Topology field in the declarative configuration
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
// If called multiple times, values provided by each call will be appended to the Topology field.
func (b *WorkloadPodGroupSchedulingConstraintsApplyConfiguration) WithTopology(values ...*TopologyConstraintApplyConfiguration) *WorkloadPodGroupSchedulingConstraintsApplyConfiguration {
	for i := range values {
		if values[i] == nil {
			panic("nil value passed to WithTopology")
		}
		b.Topology = append(b.Topology, *values[i])
	}
	return b
}
