// Copyright IBM Corp. 2020, 2026
// SPDX-License-Identifier: MPL-2.0

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        (unknown)
// source: controller/custom_options/v1/options.proto

package protooptions

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	descriptorpb "google.golang.org/protobuf/types/descriptorpb"
	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)
)

type MaskMapping struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	This          string                 `protobuf:"bytes,1,opt,name=this,proto3" json:"this,omitempty"`
	That          string                 `protobuf:"bytes,2,opt,name=that,proto3" json:"that,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*MaskMapping) ProtoMessage() {}

func (x *MaskMapping) ProtoReflect() protoreflect.Message {
	mi := &file_controller_custom_options_v1_options_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 MaskMapping.ProtoReflect.Descriptor instead.
func (*MaskMapping) Descriptor() ([]byte, []int) {
	return file_controller_custom_options_v1_options_proto_rawDescGZIP(), []int{0}
}

func (x *MaskMapping) GetThis() string {
	if x != nil {
		return x.This
	}
	return ""
}

func (x *MaskMapping) GetThat() string {
	if x != nil {
		return x.That
	}
	return ""
}

type AliasInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Aliasable:
	//
	//	*AliasInfo_Always
	//	*AliasInfo_UnlessSet
	Aliasable     isAliasInfo_Aliasable `protobuf_oneof:"aliasable"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*AliasInfo) ProtoMessage() {}

func (x *AliasInfo) ProtoReflect() protoreflect.Message {
	mi := &file_controller_custom_options_v1_options_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 AliasInfo.ProtoReflect.Descriptor instead.
func (*AliasInfo) Descriptor() ([]byte, []int) {
	return file_controller_custom_options_v1_options_proto_rawDescGZIP(), []int{1}
}

func (x *AliasInfo) GetAliasable() isAliasInfo_Aliasable {
	if x != nil {
		return x.Aliasable
	}
	return nil
}

func (x *AliasInfo) GetAlways() bool {
	if x != nil {
		if x, ok := x.Aliasable.(*AliasInfo_Always); ok {
			return x.Always
		}
	}
	return false
}

func (x *AliasInfo) GetUnlessSet() *AliasableUnlessSet {
	if x != nil {
		if x, ok := x.Aliasable.(*AliasInfo_UnlessSet); ok {
			return x.UnlessSet
		}
	}
	return nil
}

type isAliasInfo_Aliasable interface {
	isAliasInfo_Aliasable()
}

type AliasInfo_Always struct {
	Always bool `protobuf:"varint,1,opt,name=always,proto3,oneof"`
}

type AliasInfo_UnlessSet struct {
	// aliasable_with_fields is used to indicate that the field this FieldOption
	// is on, while normally aliasable, should not be aliased if any fields on this
	// same message are populated.
	UnlessSet *AliasableUnlessSet `protobuf:"bytes,2,opt,name=unless_set,json=unlessSet,proto3,oneof"`
}

func (*AliasInfo_Always) isAliasInfo_Aliasable() {}

func (*AliasInfo_UnlessSet) isAliasInfo_Aliasable() {}

type AliasableUnlessSet struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// fields is a list of fields that, if any of them are set with a non zero
	// value then the field this FieldOption is on should not be treated as an alias.
	Fields        []string `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*AliasableUnlessSet) ProtoMessage() {}

func (x *AliasableUnlessSet) ProtoReflect() protoreflect.Message {
	mi := &file_controller_custom_options_v1_options_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 AliasableUnlessSet.ProtoReflect.Descriptor instead.
func (*AliasableUnlessSet) Descriptor() ([]byte, []int) {
	return file_controller_custom_options_v1_options_proto_rawDescGZIP(), []int{2}
}

func (x *AliasableUnlessSet) GetFields() []string {
	if x != nil {
		return x.Fields
	}
	return nil
}

var file_controller_custom_options_v1_options_proto_extTypes = []protoimpl.ExtensionInfo{
	{
		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
		ExtensionType: (*MaskMapping)(nil),
		Field:         85464,
		Name:          "controller.custom_options.v1.mask_mapping",
		Tag:           "bytes,85464,opt,name=mask_mapping",
		Filename:      "controller/custom_options/v1/options.proto",
	},
	{
		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
		ExtensionType: (*bool)(nil),
		Field:         85412,
		Name:          "controller.custom_options.v1.generate_sdk_option",
		Tag:           "varint,85412,opt,name=generate_sdk_option",
		Filename:      "controller/custom_options/v1/options.proto",
	},
	{
		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
		ExtensionType: (*string)(nil),
		Field:         85555,
		Name:          "controller.custom_options.v1.subtype",
		Tag:           "bytes,85555,opt,name=subtype",
		Filename:      "controller/custom_options/v1/options.proto",
	},
	{
		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
		ExtensionType: (*bool)(nil),
		Field:         85556,
		Name:          "controller.custom_options.v1.subtype_source_id",
		Tag:           "varint,85556,opt,name=subtype_source_id",
		Filename:      "controller/custom_options/v1/options.proto",
	},
	{
		ExtendedType:  (*descriptorpb.FieldOptions)(nil),
		ExtensionType: (*AliasInfo)(nil),
		Field:         85557,
		Name:          "controller.custom_options.v1.aliasable",
		Tag:           "bytes,85557,opt,name=aliasable",
		Filename:      "controller/custom_options/v1/options.proto",
	},
	{
		ExtendedType:  (*descriptorpb.FileOptions)(nil),
		ExtensionType: (*string)(nil),
		Field:         85556,
		Name:          "controller.custom_options.v1.domain",
		Tag:           "bytes,85556,opt,name=domain",
		Filename:      "controller/custom_options/v1/options.proto",
	},
}

// Extension fields to descriptorpb.FieldOptions.
var (
	// mask_mapping is an option which tags a field with the expected field mask
	// used by a companion proto if applied on the field this option is for.
	// The value of this option should be for the field name itself and not for
	// the json name.
	//
	// optional controller.custom_options.v1.MaskMapping mask_mapping = 85464;
	E_MaskMapping = &file_controller_custom_options_v1_options_proto_extTypes[0]
	// generate_sdk_option is a directive used when generating the SDK to
	// indicate that an option should be created for the field. This also controls
	// API options (DefaultX, WithX functions).
	//
	// optional bool generate_sdk_option = 85412;
	E_GenerateSdkOption = &file_controller_custom_options_v1_options_proto_extTypes[1]
	// subtype is used for oneOf attribute subtypes, to identify that we only need to parse attributes
	// of oneOf once and not for each option when generating the API
	// This will serve as a JSON key, used to transform that into the key the protobuf expects
	//
	// optional string subtype = 85555;
	E_Subtype = &file_controller_custom_options_v1_options_proto_extTypes[2]
	// subtype_source_id is used to indicate that a field provided an id that can be used
	// to determine the subtype of a message.
	//
	// optional bool subtype_source_id = 85556;
	E_SubtypeSourceId = &file_controller_custom_options_v1_options_proto_extTypes[3]
	// aliasable_field is used to indicate that a field is aliasable. Fields with
	// this option attached will have their values checked for a possible alias
	// value at request time and will be replaced with the destination id
	// associated with the alias if found.
	//
	// optional controller.custom_options.v1.AliasInfo aliasable = 85557;
	E_Aliasable = &file_controller_custom_options_v1_options_proto_extTypes[4]
)

// Extension fields to descriptorpb.FileOptions.
var (
	// domain is used to associate the messages in a file with a domain package.
	//
	// optional string domain = 85556;
	E_Domain = &file_controller_custom_options_v1_options_proto_extTypes[5]
)

var File_controller_custom_options_v1_options_proto protoreflect.FileDescriptor

const file_controller_custom_options_v1_options_proto_rawDesc = "" +
	"\n" +
	"*controller/custom_options/v1/options.proto\x12\x1ccontroller.custom_options.v1\x1a google/protobuf/descriptor.proto\"5\n" +
	"\vMaskMapping\x12\x12\n" +
	"\x04this\x18\x01 \x01(\tR\x04this\x12\x12\n" +
	"\x04that\x18\x02 \x01(\tR\x04that\"\x85\x01\n" +
	"\tAliasInfo\x12\x18\n" +
	"\x06always\x18\x01 \x01(\bH\x00R\x06always\x12Q\n" +
	"\n" +
	"unless_set\x18\x02 \x01(\v20.controller.custom_options.v1.AliasableUnlessSetH\x00R\tunlessSetB\v\n" +
	"\taliasable\",\n" +
	"\x12AliasableUnlessSet\x12\x16\n" +
	"\x06fields\x18\x01 \x03(\tR\x06fields:m\n" +
	"\fmask_mapping\x12\x1d.google.protobuf.FieldOptions\x18؛\x05 \x01(\v2).controller.custom_options.v1.MaskMappingR\vmaskMapping:O\n" +
	"\x13generate_sdk_option\x12\x1d.google.protobuf.FieldOptions\x18\xa4\x9b\x05 \x01(\bR\x11generateSdkOption:9\n" +
	"\asubtype\x12\x1d.google.protobuf.FieldOptions\x18\xb3\x9c\x05 \x01(\tR\asubtype:K\n" +
	"\x11subtype_source_id\x12\x1d.google.protobuf.FieldOptions\x18\xb4\x9c\x05 \x01(\bR\x0fsubtypeSourceId:f\n" +
	"\taliasable\x12\x1d.google.protobuf.FieldOptions\x18\xb5\x9c\x05 \x01(\v2'.controller.custom_options.v1.AliasInfoR\taliasable:6\n" +
	"\x06domain\x12\x1c.google.protobuf.FileOptions\x18\xb4\x9c\x05 \x01(\tR\x06domainBLZJgithub.com/hashicorp/boundary/sdk/pbs/controller/protooptions;protooptionsb\x06proto3"

var (
	file_controller_custom_options_v1_options_proto_rawDescOnce sync.Once
	file_controller_custom_options_v1_options_proto_rawDescData []byte
)

func file_controller_custom_options_v1_options_proto_rawDescGZIP() []byte {
	file_controller_custom_options_v1_options_proto_rawDescOnce.Do(func() {
		file_controller_custom_options_v1_options_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_controller_custom_options_v1_options_proto_rawDesc), len(file_controller_custom_options_v1_options_proto_rawDesc)))
	})
	return file_controller_custom_options_v1_options_proto_rawDescData
}

var file_controller_custom_options_v1_options_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_controller_custom_options_v1_options_proto_goTypes = []any{
	(*MaskMapping)(nil),               // 0: controller.custom_options.v1.MaskMapping
	(*AliasInfo)(nil),                 // 1: controller.custom_options.v1.AliasInfo
	(*AliasableUnlessSet)(nil),        // 2: controller.custom_options.v1.AliasableUnlessSet
	(*descriptorpb.FieldOptions)(nil), // 3: google.protobuf.FieldOptions
	(*descriptorpb.FileOptions)(nil),  // 4: google.protobuf.FileOptions
}
var file_controller_custom_options_v1_options_proto_depIdxs = []int32{
	2, // 0: controller.custom_options.v1.AliasInfo.unless_set:type_name -> controller.custom_options.v1.AliasableUnlessSet
	3, // 1: controller.custom_options.v1.mask_mapping:extendee -> google.protobuf.FieldOptions
	3, // 2: controller.custom_options.v1.generate_sdk_option:extendee -> google.protobuf.FieldOptions
	3, // 3: controller.custom_options.v1.subtype:extendee -> google.protobuf.FieldOptions
	3, // 4: controller.custom_options.v1.subtype_source_id:extendee -> google.protobuf.FieldOptions
	3, // 5: controller.custom_options.v1.aliasable:extendee -> google.protobuf.FieldOptions
	4, // 6: controller.custom_options.v1.domain:extendee -> google.protobuf.FileOptions
	0, // 7: controller.custom_options.v1.mask_mapping:type_name -> controller.custom_options.v1.MaskMapping
	1, // 8: controller.custom_options.v1.aliasable:type_name -> controller.custom_options.v1.AliasInfo
	9, // [9:9] is the sub-list for method output_type
	9, // [9:9] is the sub-list for method input_type
	7, // [7:9] is the sub-list for extension type_name
	1, // [1:7] is the sub-list for extension extendee
	0, // [0:1] is the sub-list for field type_name
}

func init() { file_controller_custom_options_v1_options_proto_init() }
func file_controller_custom_options_v1_options_proto_init() {
	if File_controller_custom_options_v1_options_proto != nil {
		return
	}
	file_controller_custom_options_v1_options_proto_msgTypes[1].OneofWrappers = []any{
		(*AliasInfo_Always)(nil),
		(*AliasInfo_UnlessSet)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_controller_custom_options_v1_options_proto_rawDesc), len(file_controller_custom_options_v1_options_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 6,
			NumServices:   0,
		},
		GoTypes:           file_controller_custom_options_v1_options_proto_goTypes,
		DependencyIndexes: file_controller_custom_options_v1_options_proto_depIdxs,
		MessageInfos:      file_controller_custom_options_v1_options_proto_msgTypes,
		ExtensionInfos:    file_controller_custom_options_v1_options_proto_extTypes,
	}.Build()
	File_controller_custom_options_v1_options_proto = out.File
	file_controller_custom_options_v1_options_proto_goTypes = nil
	file_controller_custom_options_v1_options_proto_depIdxs = nil
}
