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

// InferenceModelRewriteRuleApplyConfiguration represents a declarative configuration of the InferenceModelRewriteRule type for use
// with apply.
//
// InferenceModelRewriteRule defines the match criteria and corresponding action.
// For details on how precedence is determined across multiple rules and
// InferenceModelRewrite resources, see the "Precedence and Conflict Resolution"
// section in InferenceModelRewriteSpec.
type InferenceModelRewriteRuleApplyConfiguration struct {
	Matches []MatchApplyConfiguration `json:"matches,omitempty"`
	// --- Actions ---
	// Targets defines how to distribute traffic across a set of
	// weighted model targets. This is used for traffic splitting, A/B tests,
	// or canary rollouts.
	Targets []TargetModelApplyConfiguration `json:"targets,omitempty"`
}

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

// WithMatches adds the given value to the Matches 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 Matches field.
func (b *InferenceModelRewriteRuleApplyConfiguration) WithMatches(values ...*MatchApplyConfiguration) *InferenceModelRewriteRuleApplyConfiguration {
	for i := range values {
		if values[i] == nil {
			panic("nil value passed to WithMatches")
		}
		b.Matches = append(b.Matches, *values[i])
	}
	return b
}

// WithTargets adds the given value to the Targets 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 Targets field.
func (b *InferenceModelRewriteRuleApplyConfiguration) WithTargets(values ...*TargetModelApplyConfiguration) *InferenceModelRewriteRuleApplyConfiguration {
	for i := range values {
		if values[i] == nil {
			panic("nil value passed to WithTargets")
		}
		b.Targets = append(b.Targets, *values[i])
	}
	return b
}
