// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        v3.21.12
// source: yandex/cloud/iam/subject.proto

package iam

import (
	_ "github.com/yandex-cloud/go-genproto/yandex/cloud"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	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 of the subject.
type SubjectType int32

const (
	// Unspecified subject type.
	SubjectType_SUBJECT_TYPE_UNSPECIFIED SubjectType = 0
	// User account subject.
	SubjectType_USER_ACCOUNT SubjectType = 1
	// Service account subject.
	SubjectType_SERVICE_ACCOUNT SubjectType = 2
	// Group subject.
	SubjectType_GROUP SubjectType = 3
	// Invitee subject.
	SubjectType_INVITEE SubjectType = 4
)

// Enum value maps for SubjectType.
var (
	SubjectType_name = map[int32]string{
		0: "SUBJECT_TYPE_UNSPECIFIED",
		1: "USER_ACCOUNT",
		2: "SERVICE_ACCOUNT",
		3: "GROUP",
		4: "INVITEE",
	}
	SubjectType_value = map[string]int32{
		"SUBJECT_TYPE_UNSPECIFIED": 0,
		"USER_ACCOUNT":             1,
		"SERVICE_ACCOUNT":          2,
		"GROUP":                    3,
		"INVITEE":                  4,
	}
)

func (x SubjectType) Enum() *SubjectType {
	p := new(SubjectType)
	*p = x
	return p
}

func (x SubjectType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubjectType) Descriptor() protoreflect.EnumDescriptor {
	return file_yandex_cloud_iam_subject_proto_enumTypes[0].Descriptor()
}

func (SubjectType) Type() protoreflect.EnumType {
	return &file_yandex_cloud_iam_subject_proto_enumTypes[0]
}

func (x SubjectType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubjectType.Descriptor instead.
func (SubjectType) EnumDescriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{0}
}

// Status of the subject.
type SubjectStatus int32

const (
	// Unspecified subject status.
	SubjectStatus_SUBJECT_STATUS_UNSPECIFIED SubjectStatus = 0
	// Subject is active.
	SubjectStatus_ACTIVE SubjectStatus = 1
	// Subject is suspended.
	SubjectStatus_SUSPENDED SubjectStatus = 2
)

// Enum value maps for SubjectStatus.
var (
	SubjectStatus_name = map[int32]string{
		0: "SUBJECT_STATUS_UNSPECIFIED",
		1: "ACTIVE",
		2: "SUSPENDED",
	}
	SubjectStatus_value = map[string]int32{
		"SUBJECT_STATUS_UNSPECIFIED": 0,
		"ACTIVE":                     1,
		"SUSPENDED":                  2,
	}
)

func (x SubjectStatus) Enum() *SubjectStatus {
	p := new(SubjectStatus)
	*p = x
	return p
}

func (x SubjectStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubjectStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_yandex_cloud_iam_subject_proto_enumTypes[1].Descriptor()
}

func (SubjectStatus) Type() protoreflect.EnumType {
	return &file_yandex_cloud_iam_subject_proto_enumTypes[1]
}

func (x SubjectStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubjectStatus.Descriptor instead.
func (SubjectStatus) EnumDescriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{1}
}

// Type of the group.
type GroupType int32

const (
	// Unspecified group type.
	GroupType_GROUP_TYPE_UNSPECIFIED GroupType = 0
	// Public group.
	GroupType_PUBLIC_ACCESS GroupType = 1
	// Regular group.
	GroupType_EXPLICIT GroupType = 2
	// System group.
	GroupType_META GroupType = 3
)

// Enum value maps for GroupType.
var (
	GroupType_name = map[int32]string{
		0: "GROUP_TYPE_UNSPECIFIED",
		1: "PUBLIC_ACCESS",
		2: "EXPLICIT",
		3: "META",
	}
	GroupType_value = map[string]int32{
		"GROUP_TYPE_UNSPECIFIED": 0,
		"PUBLIC_ACCESS":          1,
		"EXPLICIT":               2,
		"META":                   3,
	}
)

func (x GroupType) Enum() *GroupType {
	p := new(GroupType)
	*p = x
	return p
}

func (x GroupType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (GroupType) Descriptor() protoreflect.EnumDescriptor {
	return file_yandex_cloud_iam_subject_proto_enumTypes[2].Descriptor()
}

func (GroupType) Type() protoreflect.EnumType {
	return &file_yandex_cloud_iam_subject_proto_enumTypes[2]
}

func (x GroupType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use GroupType.Descriptor instead.
func (GroupType) EnumDescriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{2}
}

// Type of the subject container.
type ContainerType int32

const (
	// Unspecified container type.
	ContainerType_CONTAINER_TYPE_UNSPECIFIED ContainerType = 0
	// SAML federation container.
	ContainerType_SAML ContainerType = 1
	// Yandex Passport container.
	ContainerType_PASSPORT ContainerType = 3
	// User pool container.
	ContainerType_USERPOOL ContainerType = 4
)

// Enum value maps for ContainerType.
var (
	ContainerType_name = map[int32]string{
		0: "CONTAINER_TYPE_UNSPECIFIED",
		1: "SAML",
		3: "PASSPORT",
		4: "USERPOOL",
	}
	ContainerType_value = map[string]int32{
		"CONTAINER_TYPE_UNSPECIFIED": 0,
		"SAML":                       1,
		"PASSPORT":                   3,
		"USERPOOL":                   4,
	}
)

func (x ContainerType) Enum() *ContainerType {
	p := new(ContainerType)
	*p = x
	return p
}

func (x ContainerType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ContainerType) Descriptor() protoreflect.EnumDescriptor {
	return file_yandex_cloud_iam_subject_proto_enumTypes[3].Descriptor()
}

func (ContainerType) Type() protoreflect.EnumType {
	return &file_yandex_cloud_iam_subject_proto_enumTypes[3]
}

func (x ContainerType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ContainerType.Descriptor instead.
func (ContainerType) EnumDescriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{3}
}

type Subject struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Subject - Identifier for the End-User at the Issuer.
	Sub string `protobuf:"bytes,1,opt,name=sub,proto3" json:"sub,omitempty"`
	// Subject type.
	Type SubjectType `protobuf:"varint,2,opt,name=type,proto3,enum=yandex.cloud.iam.SubjectType" json:"type,omitempty"`
	// Creation time
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// Status
	Status SubjectStatus `protobuf:"varint,4,opt,name=status,proto3,enum=yandex.cloud.iam.SubjectStatus" json:"status,omitempty"`
	// End-User's full name in displayable form including all name parts, possibly including titles and suffixes, ordered according to the End-User's locale and preferences.
	Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
	// Last time the access token was created. Filled only for federated users (not for global users).
	LastAuthenticatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_authenticated_at,json=lastAuthenticatedAt,proto3" json:"last_authenticated_at,omitempty"`
	// Groups to which the subject belongs
	Groups []*Group `protobuf:"bytes,8,rep,name=groups,proto3" json:"groups,omitempty"`
	// Subject type-specific details.
	//
	// Types that are valid to be assigned to SubjectDetails:
	//
	//	*Subject_UserAccount
	//	*Subject_ServiceAccount
	//	*Subject_Group
	//	*Subject_Invitee
	SubjectDetails isSubject_SubjectDetails `protobuf_oneof:"subject_details"`
	// Subject id in external container
	ExternalId    string `protobuf:"bytes,14,opt,name=external_id,json=externalId,proto3" json:"external_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Subject) ProtoMessage() {}

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

func (x *Subject) GetSub() string {
	if x != nil {
		return x.Sub
	}
	return ""
}

func (x *Subject) GetType() SubjectType {
	if x != nil {
		return x.Type
	}
	return SubjectType_SUBJECT_TYPE_UNSPECIFIED
}

func (x *Subject) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *Subject) GetStatus() SubjectStatus {
	if x != nil {
		return x.Status
	}
	return SubjectStatus_SUBJECT_STATUS_UNSPECIFIED
}

func (x *Subject) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Subject) GetLastAuthenticatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.LastAuthenticatedAt
	}
	return nil
}

func (x *Subject) GetGroups() []*Group {
	if x != nil {
		return x.Groups
	}
	return nil
}

func (x *Subject) GetSubjectDetails() isSubject_SubjectDetails {
	if x != nil {
		return x.SubjectDetails
	}
	return nil
}

func (x *Subject) GetUserAccount() *UserAccount {
	if x != nil {
		if x, ok := x.SubjectDetails.(*Subject_UserAccount); ok {
			return x.UserAccount
		}
	}
	return nil
}

func (x *Subject) GetServiceAccount() *ServiceAccount {
	if x != nil {
		if x, ok := x.SubjectDetails.(*Subject_ServiceAccount); ok {
			return x.ServiceAccount
		}
	}
	return nil
}

func (x *Subject) GetGroup() *Group {
	if x != nil {
		if x, ok := x.SubjectDetails.(*Subject_Group); ok {
			return x.Group
		}
	}
	return nil
}

func (x *Subject) GetInvitee() *Invitee {
	if x != nil {
		if x, ok := x.SubjectDetails.(*Subject_Invitee); ok {
			return x.Invitee
		}
	}
	return nil
}

func (x *Subject) GetExternalId() string {
	if x != nil {
		return x.ExternalId
	}
	return ""
}

type isSubject_SubjectDetails interface {
	isSubject_SubjectDetails()
}

type Subject_UserAccount struct {
	// Details of a user account subject. Set when the subject is a user account.
	UserAccount *UserAccount `protobuf:"bytes,9,opt,name=user_account,json=userAccount,proto3,oneof"`
}

type Subject_ServiceAccount struct {
	// Details of a service account subject. Set when the subject is a service account.
	ServiceAccount *ServiceAccount `protobuf:"bytes,10,opt,name=service_account,json=serviceAccount,proto3,oneof"`
}

type Subject_Group struct {
	// Details of a group subject. Set when the subject is a group.
	Group *Group `protobuf:"bytes,11,opt,name=group,proto3,oneof"`
}

type Subject_Invitee struct {
	// Details of an invitee subject. Set when the subject is an invitee.
	Invitee *Invitee `protobuf:"bytes,12,opt,name=invitee,proto3,oneof"`
}

func (*Subject_UserAccount) isSubject_SubjectDetails() {}

func (*Subject_ServiceAccount) isSubject_SubjectDetails() {}

func (*Subject_Group) isSubject_SubjectDetails() {}

func (*Subject_Invitee) isSubject_SubjectDetails() {}

type Group struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// ID of the group.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Name of the group.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Type of the group.
	Type          GroupType `protobuf:"varint,3,opt,name=type,proto3,enum=yandex.cloud.iam.GroupType" json:"type,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Group) ProtoMessage() {}

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

func (x *Group) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Group) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Group) GetType() GroupType {
	if x != nil {
		return x.Type
	}
	return GroupType_GROUP_TYPE_UNSPECIFIED
}

type UserAccount struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Given name(s) or first name(s) of the End-User. Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters.
	GivenName string `protobuf:"bytes,1,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
	// Surname(s) or last name(s) of the End-User. Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters.
	FamilyName string `protobuf:"bytes,2,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
	// Shorthand name by which the End-User wishes to be referred to at the RP, such as janedoe or j.doe.
	// This value MAY be any valid JSON string including special characters such as @, /, or whitespace.
	PreferredUsername string `protobuf:"bytes,3,opt,name=preferred_username,json=preferredUsername,proto3" json:"preferred_username,omitempty"`
	// End-User's preferred e-mail address. Its value MUST conform to the RFC 5322 [RFC5322] addr-spec syntax.
	Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"`
	// End-User's preferred phone number.
	PhoneNumber string `protobuf:"bytes,8,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
	// Subject container
	SubjectContainer *SubjectContainer `protobuf:"bytes,11,opt,name=subject_container,json=subjectContainer,proto3" json:"subject_container,omitempty"`
	// Last time when subject identification was proofed.
	LastIdProofAt *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=last_id_proof_at,json=lastIdProofAt,proto3" json:"last_id_proof_at,omitempty"`
	// Reason of subject's suspension
	SuspendReason string `protobuf:"bytes,15,opt,name=suspend_reason,json=suspendReason,proto3" json:"suspend_reason,omitempty"`
	// Information about job
	JobInfo *JobInfo `protobuf:"bytes,16,opt,name=job_info,json=jobInfo,proto3" json:"job_info,omitempty"`
	// The subject will be suspended at the specified time
	ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
	// Last time when the user account attributes were modified
	ModifiedAt    *timestamppb.Timestamp `protobuf:"bytes,18,opt,name=modified_at,json=modifiedAt,proto3" json:"modified_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*UserAccount) ProtoMessage() {}

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

func (x *UserAccount) GetGivenName() string {
	if x != nil {
		return x.GivenName
	}
	return ""
}

func (x *UserAccount) GetFamilyName() string {
	if x != nil {
		return x.FamilyName
	}
	return ""
}

func (x *UserAccount) GetPreferredUsername() string {
	if x != nil {
		return x.PreferredUsername
	}
	return ""
}

func (x *UserAccount) GetEmail() string {
	if x != nil {
		return x.Email
	}
	return ""
}

func (x *UserAccount) GetPhoneNumber() string {
	if x != nil {
		return x.PhoneNumber
	}
	return ""
}

func (x *UserAccount) GetSubjectContainer() *SubjectContainer {
	if x != nil {
		return x.SubjectContainer
	}
	return nil
}

func (x *UserAccount) GetLastIdProofAt() *timestamppb.Timestamp {
	if x != nil {
		return x.LastIdProofAt
	}
	return nil
}

func (x *UserAccount) GetSuspendReason() string {
	if x != nil {
		return x.SuspendReason
	}
	return ""
}

func (x *UserAccount) GetJobInfo() *JobInfo {
	if x != nil {
		return x.JobInfo
	}
	return nil
}

func (x *UserAccount) GetExpiresAt() *timestamppb.Timestamp {
	if x != nil {
		return x.ExpiresAt
	}
	return nil
}

func (x *UserAccount) GetModifiedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.ModifiedAt
	}
	return nil
}

type SubjectContainer struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// ID of the subject container.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Name of the subject container.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Type of the subject container.
	ContainerType ContainerType `protobuf:"varint,3,opt,name=container_type,json=containerType,proto3,enum=yandex.cloud.iam.ContainerType" json:"container_type,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SubjectContainer) Reset() {
	*x = SubjectContainer{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SubjectContainer) ProtoMessage() {}

func (x *SubjectContainer) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[3]
	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 SubjectContainer.ProtoReflect.Descriptor instead.
func (*SubjectContainer) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{3}
}

func (x *SubjectContainer) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *SubjectContainer) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *SubjectContainer) GetContainerType() ContainerType {
	if x != nil {
		return x.ContainerType
	}
	return ContainerType_CONTAINER_TYPE_UNSPECIFIED
}

type ServiceAccount struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Cloud the service account belongs to.
	Cloud *Cloud `protobuf:"bytes,1,opt,name=cloud,proto3" json:"cloud,omitempty"`
	// Folder the service account belongs to.
	Folder *Folder `protobuf:"bytes,2,opt,name=folder,proto3" json:"folder,omitempty"`
	// Service agent details. Set when the service account is a service agent.
	ServiceAgent  *ServiceAgent `protobuf:"bytes,3,opt,name=service_agent,json=serviceAgent,proto3" json:"service_agent,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ServiceAccount) Reset() {
	*x = ServiceAccount{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ServiceAccount) ProtoMessage() {}

func (x *ServiceAccount) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[4]
	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 ServiceAccount.ProtoReflect.Descriptor instead.
func (*ServiceAccount) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{4}
}

func (x *ServiceAccount) GetCloud() *Cloud {
	if x != nil {
		return x.Cloud
	}
	return nil
}

func (x *ServiceAccount) GetFolder() *Folder {
	if x != nil {
		return x.Folder
	}
	return nil
}

func (x *ServiceAccount) GetServiceAgent() *ServiceAgent {
	if x != nil {
		return x.ServiceAgent
	}
	return nil
}

type Cloud struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// ID of the cloud.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Name of the cloud.
	Name          string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Cloud) Reset() {
	*x = Cloud{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*Cloud) ProtoMessage() {}

func (x *Cloud) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[5]
	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 Cloud.ProtoReflect.Descriptor instead.
func (*Cloud) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{5}
}

func (x *Cloud) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Cloud) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

type Folder struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// ID of the folder.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Name of the folder.
	Name          string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Folder) Reset() {
	*x = Folder{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*Folder) ProtoMessage() {}

func (x *Folder) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[6]
	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 Folder.ProtoReflect.Descriptor instead.
func (*Folder) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{6}
}

func (x *Folder) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Folder) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

type ServiceAgent struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// ID of the service the service agent acts on behalf of.
	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
	// ID of the microservice the service agent acts on behalf of.
	MicroserviceId string `protobuf:"bytes,2,opt,name=microservice_id,json=microserviceId,proto3" json:"microservice_id,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ServiceAgent) Reset() {
	*x = ServiceAgent{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ServiceAgent) ProtoMessage() {}

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

func (x *ServiceAgent) GetServiceId() string {
	if x != nil {
		return x.ServiceId
	}
	return ""
}

func (x *ServiceAgent) GetMicroserviceId() string {
	if x != nil {
		return x.MicroserviceId
	}
	return ""
}

type Invitee struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// E-mail address of the invitee.
	Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
	// Preferred username of the invitee.
	PreferredUsername string `protobuf:"bytes,2,opt,name=preferred_username,json=preferredUsername,proto3" json:"preferred_username,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *Invitee) Reset() {
	*x = Invitee{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*Invitee) ProtoMessage() {}

func (x *Invitee) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[8]
	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 Invitee.ProtoReflect.Descriptor instead.
func (*Invitee) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{8}
}

func (x *Invitee) GetEmail() string {
	if x != nil {
		return x.Email
	}
	return ""
}

func (x *Invitee) GetPreferredUsername() string {
	if x != nil {
		return x.PreferredUsername
	}
	return ""
}

type JobInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Name of the company the user works for.
	CompanyName string `protobuf:"bytes,1,opt,name=company_name,json=companyName,proto3" json:"company_name,omitempty"`
	// Department the user belongs to.
	Department string `protobuf:"bytes,2,opt,name=department,proto3" json:"department,omitempty"`
	// Job title of the user.
	JobTitle string `protobuf:"bytes,3,opt,name=job_title,json=jobTitle,proto3" json:"job_title,omitempty"`
	// Employee identifier of the user.
	EmployeeId    string `protobuf:"bytes,4,opt,name=employee_id,json=employeeId,proto3" json:"employee_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *JobInfo) Reset() {
	*x = JobInfo{}
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*JobInfo) ProtoMessage() {}

func (x *JobInfo) ProtoReflect() protoreflect.Message {
	mi := &file_yandex_cloud_iam_subject_proto_msgTypes[9]
	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 JobInfo.ProtoReflect.Descriptor instead.
func (*JobInfo) Descriptor() ([]byte, []int) {
	return file_yandex_cloud_iam_subject_proto_rawDescGZIP(), []int{9}
}

func (x *JobInfo) GetCompanyName() string {
	if x != nil {
		return x.CompanyName
	}
	return ""
}

func (x *JobInfo) GetDepartment() string {
	if x != nil {
		return x.Department
	}
	return ""
}

func (x *JobInfo) GetJobTitle() string {
	if x != nil {
		return x.JobTitle
	}
	return ""
}

func (x *JobInfo) GetEmployeeId() string {
	if x != nil {
		return x.EmployeeId
	}
	return ""
}

var File_yandex_cloud_iam_subject_proto protoreflect.FileDescriptor

const file_yandex_cloud_iam_subject_proto_rawDesc = "" +
	"\n" +
	"\x1eyandex/cloud/iam/subject.proto\x12\x10yandex.cloud.iam\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1dyandex/cloud/validation.proto\"\xab\x05\n" +
	"\aSubject\x12\x1f\n" +
	"\x03sub\x18\x01 \x01(\tB\r\xe8\xc71\x01\x8a\xc81\x05<=100R\x03sub\x127\n" +
	"\x04type\x18\x02 \x01(\x0e2\x1d.yandex.cloud.iam.SubjectTypeB\x04\xe8\xc71\x01R\x04type\x129\n" +
	"\n" +
	"created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x127\n" +
	"\x06status\x18\x04 \x01(\x0e2\x1f.yandex.cloud.iam.SubjectStatusR\x06status\x12\x12\n" +
	"\x04name\x18\x05 \x01(\tR\x04name\x12N\n" +
	"\x15last_authenticated_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\x13lastAuthenticatedAt\x12/\n" +
	"\x06groups\x18\b \x03(\v2\x17.yandex.cloud.iam.GroupR\x06groups\x12B\n" +
	"\fuser_account\x18\t \x01(\v2\x1d.yandex.cloud.iam.UserAccountH\x00R\vuserAccount\x12K\n" +
	"\x0fservice_account\x18\n" +
	" \x01(\v2 .yandex.cloud.iam.ServiceAccountH\x00R\x0eserviceAccount\x12/\n" +
	"\x05group\x18\v \x01(\v2\x17.yandex.cloud.iam.GroupH\x00R\x05group\x125\n" +
	"\ainvitee\x18\f \x01(\v2\x19.yandex.cloud.iam.InviteeH\x00R\ainvitee\x12\x1f\n" +
	"\vexternal_id\x18\x0e \x01(\tR\n" +
	"externalIdB\x17\n" +
	"\x0fsubject_details\x12\x04\xc0\xc11\x01J\x04\b\a\x10\bJ\x04\b\r\x10\x0e\"\\\n" +
	"\x05Group\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\x12/\n" +
	"\x04type\x18\x03 \x01(\x0e2\x1b.yandex.cloud.iam.GroupTypeR\x04type\"\xb2\x04\n" +
	"\vUserAccount\x12\x1d\n" +
	"\n" +
	"given_name\x18\x01 \x01(\tR\tgivenName\x12\x1f\n" +
	"\vfamily_name\x18\x02 \x01(\tR\n" +
	"familyName\x12-\n" +
	"\x12preferred_username\x18\x03 \x01(\tR\x11preferredUsername\x12\x14\n" +
	"\x05email\x18\x04 \x01(\tR\x05email\x12!\n" +
	"\fphone_number\x18\b \x01(\tR\vphoneNumber\x12O\n" +
	"\x11subject_container\x18\v \x01(\v2\".yandex.cloud.iam.SubjectContainerR\x10subjectContainer\x12C\n" +
	"\x10last_id_proof_at\x18\x0e \x01(\v2\x1a.google.protobuf.TimestampR\rlastIdProofAt\x12%\n" +
	"\x0esuspend_reason\x18\x0f \x01(\tR\rsuspendReason\x124\n" +
	"\bjob_info\x18\x10 \x01(\v2\x19.yandex.cloud.iam.JobInfoR\ajobInfo\x129\n" +
	"\n" +
	"expires_at\x18\x11 \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt\x12;\n" +
	"\vmodified_at\x18\x12 \x01(\v2\x1a.google.protobuf.TimestampR\n" +
	"modifiedAtJ\x04\b\x05\x10\bJ\x04\b\t\x10\vJ\x04\b\f\x10\x0e\"~\n" +
	"\x10SubjectContainer\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\x12F\n" +
	"\x0econtainer_type\x18\x03 \x01(\x0e2\x1f.yandex.cloud.iam.ContainerTypeR\rcontainerType\"\xb6\x01\n" +
	"\x0eServiceAccount\x12-\n" +
	"\x05cloud\x18\x01 \x01(\v2\x17.yandex.cloud.iam.CloudR\x05cloud\x120\n" +
	"\x06folder\x18\x02 \x01(\v2\x18.yandex.cloud.iam.FolderR\x06folder\x12C\n" +
	"\rservice_agent\x18\x03 \x01(\v2\x1e.yandex.cloud.iam.ServiceAgentR\fserviceAgent\"+\n" +
	"\x05Cloud\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\",\n" +
	"\x06Folder\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\"V\n" +
	"\fServiceAgent\x12\x1d\n" +
	"\n" +
	"service_id\x18\x01 \x01(\tR\tserviceId\x12'\n" +
	"\x0fmicroservice_id\x18\x02 \x01(\tR\x0emicroserviceId\"N\n" +
	"\aInvitee\x12\x14\n" +
	"\x05email\x18\x01 \x01(\tR\x05email\x12-\n" +
	"\x12preferred_username\x18\x02 \x01(\tR\x11preferredUsername\"\x8a\x01\n" +
	"\aJobInfo\x12!\n" +
	"\fcompany_name\x18\x01 \x01(\tR\vcompanyName\x12\x1e\n" +
	"\n" +
	"department\x18\x02 \x01(\tR\n" +
	"department\x12\x1b\n" +
	"\tjob_title\x18\x03 \x01(\tR\bjobTitle\x12\x1f\n" +
	"\vemployee_id\x18\x04 \x01(\tR\n" +
	"employeeId*j\n" +
	"\vSubjectType\x12\x1c\n" +
	"\x18SUBJECT_TYPE_UNSPECIFIED\x10\x00\x12\x10\n" +
	"\fUSER_ACCOUNT\x10\x01\x12\x13\n" +
	"\x0fSERVICE_ACCOUNT\x10\x02\x12\t\n" +
	"\x05GROUP\x10\x03\x12\v\n" +
	"\aINVITEE\x10\x04*J\n" +
	"\rSubjectStatus\x12\x1e\n" +
	"\x1aSUBJECT_STATUS_UNSPECIFIED\x10\x00\x12\n" +
	"\n" +
	"\x06ACTIVE\x10\x01\x12\r\n" +
	"\tSUSPENDED\x10\x02*R\n" +
	"\tGroupType\x12\x1a\n" +
	"\x16GROUP_TYPE_UNSPECIFIED\x10\x00\x12\x11\n" +
	"\rPUBLIC_ACCESS\x10\x01\x12\f\n" +
	"\bEXPLICIT\x10\x02\x12\b\n" +
	"\x04META\x10\x03*U\n" +
	"\rContainerType\x12\x1e\n" +
	"\x1aCONTAINER_TYPE_UNSPECIFIED\x10\x00\x12\b\n" +
	"\x04SAML\x10\x01\x12\f\n" +
	"\bPASSPORT\x10\x03\x12\f\n" +
	"\bUSERPOOL\x10\x04BS\n" +
	"\x17yandex.cloud.api.iam.v1Z8github.com/yandex-cloud/go-genproto/yandex/cloud/iam;iamb\x06proto3"

var (
	file_yandex_cloud_iam_subject_proto_rawDescOnce sync.Once
	file_yandex_cloud_iam_subject_proto_rawDescData []byte
)

func file_yandex_cloud_iam_subject_proto_rawDescGZIP() []byte {
	file_yandex_cloud_iam_subject_proto_rawDescOnce.Do(func() {
		file_yandex_cloud_iam_subject_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_yandex_cloud_iam_subject_proto_rawDesc), len(file_yandex_cloud_iam_subject_proto_rawDesc)))
	})
	return file_yandex_cloud_iam_subject_proto_rawDescData
}

var file_yandex_cloud_iam_subject_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
var file_yandex_cloud_iam_subject_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_yandex_cloud_iam_subject_proto_goTypes = []any{
	(SubjectType)(0),              // 0: yandex.cloud.iam.SubjectType
	(SubjectStatus)(0),            // 1: yandex.cloud.iam.SubjectStatus
	(GroupType)(0),                // 2: yandex.cloud.iam.GroupType
	(ContainerType)(0),            // 3: yandex.cloud.iam.ContainerType
	(*Subject)(nil),               // 4: yandex.cloud.iam.Subject
	(*Group)(nil),                 // 5: yandex.cloud.iam.Group
	(*UserAccount)(nil),           // 6: yandex.cloud.iam.UserAccount
	(*SubjectContainer)(nil),      // 7: yandex.cloud.iam.SubjectContainer
	(*ServiceAccount)(nil),        // 8: yandex.cloud.iam.ServiceAccount
	(*Cloud)(nil),                 // 9: yandex.cloud.iam.Cloud
	(*Folder)(nil),                // 10: yandex.cloud.iam.Folder
	(*ServiceAgent)(nil),          // 11: yandex.cloud.iam.ServiceAgent
	(*Invitee)(nil),               // 12: yandex.cloud.iam.Invitee
	(*JobInfo)(nil),               // 13: yandex.cloud.iam.JobInfo
	(*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp
}
var file_yandex_cloud_iam_subject_proto_depIdxs = []int32{
	0,  // 0: yandex.cloud.iam.Subject.type:type_name -> yandex.cloud.iam.SubjectType
	14, // 1: yandex.cloud.iam.Subject.created_at:type_name -> google.protobuf.Timestamp
	1,  // 2: yandex.cloud.iam.Subject.status:type_name -> yandex.cloud.iam.SubjectStatus
	14, // 3: yandex.cloud.iam.Subject.last_authenticated_at:type_name -> google.protobuf.Timestamp
	5,  // 4: yandex.cloud.iam.Subject.groups:type_name -> yandex.cloud.iam.Group
	6,  // 5: yandex.cloud.iam.Subject.user_account:type_name -> yandex.cloud.iam.UserAccount
	8,  // 6: yandex.cloud.iam.Subject.service_account:type_name -> yandex.cloud.iam.ServiceAccount
	5,  // 7: yandex.cloud.iam.Subject.group:type_name -> yandex.cloud.iam.Group
	12, // 8: yandex.cloud.iam.Subject.invitee:type_name -> yandex.cloud.iam.Invitee
	2,  // 9: yandex.cloud.iam.Group.type:type_name -> yandex.cloud.iam.GroupType
	7,  // 10: yandex.cloud.iam.UserAccount.subject_container:type_name -> yandex.cloud.iam.SubjectContainer
	14, // 11: yandex.cloud.iam.UserAccount.last_id_proof_at:type_name -> google.protobuf.Timestamp
	13, // 12: yandex.cloud.iam.UserAccount.job_info:type_name -> yandex.cloud.iam.JobInfo
	14, // 13: yandex.cloud.iam.UserAccount.expires_at:type_name -> google.protobuf.Timestamp
	14, // 14: yandex.cloud.iam.UserAccount.modified_at:type_name -> google.protobuf.Timestamp
	3,  // 15: yandex.cloud.iam.SubjectContainer.container_type:type_name -> yandex.cloud.iam.ContainerType
	9,  // 16: yandex.cloud.iam.ServiceAccount.cloud:type_name -> yandex.cloud.iam.Cloud
	10, // 17: yandex.cloud.iam.ServiceAccount.folder:type_name -> yandex.cloud.iam.Folder
	11, // 18: yandex.cloud.iam.ServiceAccount.service_agent:type_name -> yandex.cloud.iam.ServiceAgent
	19, // [19:19] is the sub-list for method output_type
	19, // [19:19] is the sub-list for method input_type
	19, // [19:19] is the sub-list for extension type_name
	19, // [19:19] is the sub-list for extension extendee
	0,  // [0:19] is the sub-list for field type_name
}

func init() { file_yandex_cloud_iam_subject_proto_init() }
func file_yandex_cloud_iam_subject_proto_init() {
	if File_yandex_cloud_iam_subject_proto != nil {
		return
	}
	file_yandex_cloud_iam_subject_proto_msgTypes[0].OneofWrappers = []any{
		(*Subject_UserAccount)(nil),
		(*Subject_ServiceAccount)(nil),
		(*Subject_Group)(nil),
		(*Subject_Invitee)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_yandex_cloud_iam_subject_proto_rawDesc), len(file_yandex_cloud_iam_subject_proto_rawDesc)),
			NumEnums:      4,
			NumMessages:   10,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_yandex_cloud_iam_subject_proto_goTypes,
		DependencyIndexes: file_yandex_cloud_iam_subject_proto_depIdxs,
		EnumInfos:         file_yandex_cloud_iam_subject_proto_enumTypes,
		MessageInfos:      file_yandex_cloud_iam_subject_proto_msgTypes,
	}.Build()
	File_yandex_cloud_iam_subject_proto = out.File
	file_yandex_cloud_iam_subject_proto_goTypes = nil
	file_yandex_cloud_iam_subject_proto_depIdxs = nil
}
