// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        v7.35.1
// source: envoy/type/v3/hash_policy.proto

package typev3

import (
	_ "github.com/cncf/xds/go/udpa/annotations"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Specifies the hash policy
type HashPolicy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to PolicySpecifier:
	//
	//	*HashPolicy_SourceIp_
	//	*HashPolicy_FilterState_
	PolicySpecifier isHashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *HashPolicy) Reset() {
	*x = HashPolicy{}
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *HashPolicy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HashPolicy) ProtoMessage() {}

func (x *HashPolicy) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HashPolicy.ProtoReflect.Descriptor instead.
func (*HashPolicy) Descriptor() ([]byte, []int) {
	return file_envoy_type_v3_hash_policy_proto_rawDescGZIP(), []int{0}
}

func (x *HashPolicy) GetPolicySpecifier() isHashPolicy_PolicySpecifier {
	if x != nil {
		return x.PolicySpecifier
	}
	return nil
}

func (x *HashPolicy) GetSourceIp() *HashPolicy_SourceIp {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*HashPolicy_SourceIp_); ok {
			return x.SourceIp
		}
	}
	return nil
}

func (x *HashPolicy) GetFilterState() *HashPolicy_FilterState {
	if x != nil {
		if x, ok := x.PolicySpecifier.(*HashPolicy_FilterState_); ok {
			return x.FilterState
		}
	}
	return nil
}

type isHashPolicy_PolicySpecifier interface {
	isHashPolicy_PolicySpecifier()
}

type HashPolicy_SourceIp_ struct {
	SourceIp *HashPolicy_SourceIp `protobuf:"bytes,1,opt,name=source_ip,json=sourceIp,proto3,oneof"`
}

type HashPolicy_FilterState_ struct {
	FilterState *HashPolicy_FilterState `protobuf:"bytes,2,opt,name=filter_state,json=filterState,proto3,oneof"`
}

func (*HashPolicy_SourceIp_) isHashPolicy_PolicySpecifier() {}

func (*HashPolicy_FilterState_) isHashPolicy_PolicySpecifier() {}

// The source IP will be used to compute the hash used by hash-based load balancing
// algorithms.
type HashPolicy_SourceIp struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *HashPolicy_SourceIp) Reset() {
	*x = HashPolicy_SourceIp{}
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *HashPolicy_SourceIp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HashPolicy_SourceIp) ProtoMessage() {}

func (x *HashPolicy_SourceIp) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HashPolicy_SourceIp.ProtoReflect.Descriptor instead.
func (*HashPolicy_SourceIp) Descriptor() ([]byte, []int) {
	return file_envoy_type_v3_hash_policy_proto_rawDescGZIP(), []int{0, 0}
}

// An Object in the :ref:`filterState <arch_overview_data_sharing_between_filters>` will be used
// to compute the hash used by hash-based load balancing algorithms.
type HashPolicy_FilterState struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The name of the Object in the filterState, which is an Envoy::Hashable object. If there is no
	// data associated with the key, or the stored object is not Envoy::Hashable, no hash will be
	// produced.
	Key           string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *HashPolicy_FilterState) Reset() {
	*x = HashPolicy_FilterState{}
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *HashPolicy_FilterState) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HashPolicy_FilterState) ProtoMessage() {}

func (x *HashPolicy_FilterState) ProtoReflect() protoreflect.Message {
	mi := &file_envoy_type_v3_hash_policy_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HashPolicy_FilterState.ProtoReflect.Descriptor instead.
func (*HashPolicy_FilterState) Descriptor() ([]byte, []int) {
	return file_envoy_type_v3_hash_policy_proto_rawDescGZIP(), []int{0, 1}
}

func (x *HashPolicy_FilterState) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

var File_envoy_type_v3_hash_policy_proto protoreflect.FileDescriptor

const file_envoy_type_v3_hash_policy_proto_rawDesc = "" +
	"\n" +
	"\x1fenvoy/type/v3/hash_policy.proto\x12\renvoy.type.v3\x1a\x1dudpa/annotations/status.proto\x1a!udpa/annotations/versioning.proto\x1a\x17validate/validate.proto\"\xaf\x02\n" +
	"\n" +
	"HashPolicy\x12A\n" +
	"\tsource_ip\x18\x01 \x01(\v2\".envoy.type.v3.HashPolicy.SourceIpH\x00R\bsourceIp\x12J\n" +
	"\ffilter_state\x18\x02 \x01(\v2%.envoy.type.v3.HashPolicy.FilterStateH\x00R\vfilterState\x1a1\n" +
	"\bSourceIp:%\x9aň\x1e \n" +
	"\x1eenvoy.type.HashPolicy.SourceIp\x1a(\n" +
	"\vFilterState\x12\x19\n" +
	"\x03key\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\x03key:\x1c\x9aň\x1e\x17\n" +
	"\x15envoy.type.HashPolicyB\x17\n" +
	"\x10policy_specifier\x12\x03\xf8B\x01Bu\xba\x80\xc8\xd1\x06\x02\x10\x02\n" +
	"\x1bio.envoyproxy.envoy.type.v3B\x0fHashPolicyProtoP\x01Z;github.com/envoyproxy/go-control-plane/envoy/type/v3;typev3b\x06proto3"

var (
	file_envoy_type_v3_hash_policy_proto_rawDescOnce sync.Once
	file_envoy_type_v3_hash_policy_proto_rawDescData []byte
)

func file_envoy_type_v3_hash_policy_proto_rawDescGZIP() []byte {
	file_envoy_type_v3_hash_policy_proto_rawDescOnce.Do(func() {
		file_envoy_type_v3_hash_policy_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_envoy_type_v3_hash_policy_proto_rawDesc), len(file_envoy_type_v3_hash_policy_proto_rawDesc)))
	})
	return file_envoy_type_v3_hash_policy_proto_rawDescData
}

var file_envoy_type_v3_hash_policy_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_envoy_type_v3_hash_policy_proto_goTypes = []any{
	(*HashPolicy)(nil),             // 0: envoy.type.v3.HashPolicy
	(*HashPolicy_SourceIp)(nil),    // 1: envoy.type.v3.HashPolicy.SourceIp
	(*HashPolicy_FilterState)(nil), // 2: envoy.type.v3.HashPolicy.FilterState
}
var file_envoy_type_v3_hash_policy_proto_depIdxs = []int32{
	1, // 0: envoy.type.v3.HashPolicy.source_ip:type_name -> envoy.type.v3.HashPolicy.SourceIp
	2, // 1: envoy.type.v3.HashPolicy.filter_state:type_name -> envoy.type.v3.HashPolicy.FilterState
	2, // [2:2] is the sub-list for method output_type
	2, // [2:2] is the sub-list for method input_type
	2, // [2:2] is the sub-list for extension type_name
	2, // [2:2] is the sub-list for extension extendee
	0, // [0:2] is the sub-list for field type_name
}

func init() { file_envoy_type_v3_hash_policy_proto_init() }
func file_envoy_type_v3_hash_policy_proto_init() {
	if File_envoy_type_v3_hash_policy_proto != nil {
		return
	}
	file_envoy_type_v3_hash_policy_proto_msgTypes[0].OneofWrappers = []any{
		(*HashPolicy_SourceIp_)(nil),
		(*HashPolicy_FilterState_)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_envoy_type_v3_hash_policy_proto_rawDesc), len(file_envoy_type_v3_hash_policy_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_envoy_type_v3_hash_policy_proto_goTypes,
		DependencyIndexes: file_envoy_type_v3_hash_policy_proto_depIdxs,
		MessageInfos:      file_envoy_type_v3_hash_policy_proto_msgTypes,
	}.Build()
	File_envoy_type_v3_hash_policy_proto = out.File
	file_envoy_type_v3_hash_policy_proto_goTypes = nil
	file_envoy_type_v3_hash_policy_proto_depIdxs = nil
}
