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

// HTTPRequestMirrorFilterApplyConfiguration represents a declarative configuration of the HTTPRequestMirrorFilter type for use
// with apply.
//
// HTTPRequestMirrorFilter defines configuration for the RequestMirror filter.
type HTTPRequestMirrorFilterApplyConfiguration struct {
	// BackendRef references a resource where mirrored requests are sent.
	//
	// Mirrored requests must be sent only to a single destination endpoint
	// within this BackendRef, irrespective of how many endpoints are present
	// within this BackendRef.
	//
	// If the referent cannot be found, this BackendRef is invalid and must be
	// dropped from the Gateway. The controller must ensure the "ResolvedRefs"
	// condition on the Route status is set to `status: False` and not configure
	// this backend in the underlying implementation.
	//
	// If there is a cross-namespace reference to an *existing* object
	// that is not allowed by a ReferenceGrant, the controller must ensure the
	// "ResolvedRefs"  condition on the Route is set to `status: False`,
	// with the "RefNotPermitted" reason and not configure this backend in the
	// underlying implementation.
	//
	// In either error case, the Message of the `ResolvedRefs` Condition
	// should be used to provide more detail about the problem.
	//
	// Support: Extended for Kubernetes Service
	//
	// Support: Implementation-specific for any other resource
	BackendRef *BackendObjectReferenceApplyConfiguration `json:"backendRef,omitempty"`
	// Percent represents the percentage of requests that should be
	// mirrored to BackendRef. Its minimum value is 0 (indicating 0% of
	// requests) and its maximum value is 100 (indicating 100% of requests).
	//
	// Only one of Fraction or Percent may be specified. If neither field
	// is specified, 100% of requests will be mirrored.
	Percent *int32 `json:"percent,omitempty"`
	// Fraction represents the fraction of requests that should be
	// mirrored to BackendRef.
	//
	// Only one of Fraction or Percent may be specified. If neither field
	// is specified, 100% of requests will be mirrored.
	Fraction *FractionApplyConfiguration `json:"fraction,omitempty"`
}

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

// WithBackendRef sets the BackendRef 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 BackendRef field is set to the value of the last call.
func (b *HTTPRequestMirrorFilterApplyConfiguration) WithBackendRef(value *BackendObjectReferenceApplyConfiguration) *HTTPRequestMirrorFilterApplyConfiguration {
	b.BackendRef = value
	return b
}

// WithPercent sets the Percent 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 Percent field is set to the value of the last call.
func (b *HTTPRequestMirrorFilterApplyConfiguration) WithPercent(value int32) *HTTPRequestMirrorFilterApplyConfiguration {
	b.Percent = &value
	return b
}

// WithFraction sets the Fraction 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 Fraction field is set to the value of the last call.
func (b *HTTPRequestMirrorFilterApplyConfiguration) WithFraction(value *FractionApplyConfiguration) *HTTPRequestMirrorFilterApplyConfiguration {
	b.Fraction = value
	return b
}
