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

import (
	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
)

// HTTPPathModifierApplyConfiguration represents a declarative configuration of the HTTPPathModifier type for use
// with apply.
//
// HTTPPathModifier defines configuration for path modifiers.
type HTTPPathModifierApplyConfiguration struct {
	// Type defines the type of path modifier. Additional types may be
	// added in a future release of the API.
	//
	// Note that values may be added to this enum, implementations
	// must ensure that unknown values will not cause a crash.
	//
	// Unknown values here must result in the implementation setting the
	// Accepted Condition for the Route to `status: False`, with a
	// Reason of `UnsupportedValue`.
	Type *apisv1.HTTPPathModifierType `json:"type,omitempty"`
	// ReplaceFullPath specifies the value with which to replace the full path
	// of a request during a rewrite or redirect.
	ReplaceFullPath *string `json:"replaceFullPath,omitempty"`
	// ReplacePrefixMatch specifies the value with which to replace the prefix
	// match of a request during a rewrite or redirect. For example, a request
	// to "/foo/bar" with a prefix match of "/foo" and a ReplacePrefixMatch
	// of "/xyz" would be modified to "/xyz/bar".
	//
	// Note that this matches the behavior of the PathPrefix match type. This
	// matches full path elements. A path element refers to the list of labels
	// in the path split by the `/` separator. When specified, a trailing `/` is
	// ignored. For example, the paths `/abc`, `/abc/`, and `/abc/def` would all
	// match the prefix `/abc`, but the path `/abcd` would not.
	//
	// ReplacePrefixMatch is only compatible with a `PathPrefix` HTTPRouteMatch.
	// Using any other HTTPRouteMatch type on the same HTTPRouteRule will result in
	// the implementation setting the Accepted Condition for the Route to `status: False`.
	//
	// Request Path | Prefix Match | Replace Prefix | Modified Path
	// -------------|--------------|----------------|----------
	// /foo/bar     | /foo         | /xyz           | /xyz/bar
	// /foo/bar     | /foo         | /xyz/          | /xyz/bar
	// /foo/bar     | /foo/        | /xyz           | /xyz/bar
	// /foo/bar     | /foo/        | /xyz/          | /xyz/bar
	// /foo         | /foo         | /xyz           | /xyz
	// /foo/        | /foo         | /xyz           | /xyz/
	// /foo/bar     | /foo         | <empty string> | /bar
	// /foo/        | /foo         | <empty string> | /
	// /foo         | /foo         | <empty string> | /
	// /foo/        | /foo         | /              | /
	// /foo         | /foo         | /              | /
	ReplacePrefixMatch *string `json:"replacePrefixMatch,omitempty"`
}

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

// WithType sets the Type 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 Type field is set to the value of the last call.
func (b *HTTPPathModifierApplyConfiguration) WithType(value apisv1.HTTPPathModifierType) *HTTPPathModifierApplyConfiguration {
	b.Type = &value
	return b
}

// WithReplaceFullPath sets the ReplaceFullPath 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 ReplaceFullPath field is set to the value of the last call.
func (b *HTTPPathModifierApplyConfiguration) WithReplaceFullPath(value string) *HTTPPathModifierApplyConfiguration {
	b.ReplaceFullPath = &value
	return b
}

// WithReplacePrefixMatch sets the ReplacePrefixMatch 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 ReplacePrefixMatch field is set to the value of the last call.
func (b *HTTPPathModifierApplyConfiguration) WithReplacePrefixMatch(value string) *HTTPPathModifierApplyConfiguration {
	b.ReplacePrefixMatch = &value
	return b
}
