github.com/cloudwan/edgelq-sdk@v1.15.4/iam/resources/v1/role/role.pb.name.go (about)

     1  // Code generated by protoc-gen-goten-resource
     2  // Resource: Role
     3  // DO NOT EDIT!!!
     4  
     5  package role
     6  
     7  import (
     8  	"fmt"
     9  	"net/url"
    10  	"reflect"
    11  	"regexp"
    12  	"strings"
    13  
    14  	"google.golang.org/grpc/codes"
    15  	"google.golang.org/grpc/status"
    16  	"google.golang.org/protobuf/proto"
    17  
    18  	"github.com/cloudwan/goten-sdk/runtime/goten"
    19  	gotenresource "github.com/cloudwan/goten-sdk/runtime/resource"
    20  )
    21  
    22  // proto imports
    23  import (
    24  	condition "github.com/cloudwan/edgelq-sdk/iam/resources/v1/condition"
    25  	organization "github.com/cloudwan/edgelq-sdk/iam/resources/v1/organization"
    26  	permission "github.com/cloudwan/edgelq-sdk/iam/resources/v1/permission"
    27  	project "github.com/cloudwan/edgelq-sdk/iam/resources/v1/project"
    28  	meta_service "github.com/cloudwan/goten-sdk/meta-service/resources/v1/service"
    29  	meta "github.com/cloudwan/goten-sdk/types/meta"
    30  )
    31  
    32  // ensure the imports are used
    33  var (
    34  	_ = codes.NotFound
    35  	_ = new(fmt.Stringer)
    36  	_ = new(proto.Message)
    37  	_ = status.Status{}
    38  	_ = url.URL{}
    39  	_ = strings.Builder{}
    40  
    41  	_ = new(goten.GotenMessage)
    42  	_ = new(gotenresource.ListQuery)
    43  )
    44  
    45  // make sure we're using proto imports
    46  var (
    47  	_ = &condition.Condition{}
    48  	_ = &organization.Organization{}
    49  	_ = &permission.Permission{}
    50  	_ = &project.Project{}
    51  	_ = &meta_service.Service{}
    52  	_ = &meta.Meta{}
    53  )
    54  
    55  var role_RegexpId = regexp.MustCompile("^(?P<role_id>[a-zA-Z0-9-]{1,128})$")
    56  var regexPath_Service = regexp.MustCompile("^services/(?P<service_id>-|[a-z][a-z0-9\\-.]{0,28}[a-z0-9])/roles/(?P<role_id>-|[a-zA-Z0-9-]{1,128})$")
    57  var regexPath_Project = regexp.MustCompile("^projects/(?P<project_id>-|[\\w][\\w.-]{0,127})/roles/(?P<role_id>-|[a-zA-Z0-9-]{1,128})$")
    58  var regexPath_Organization = regexp.MustCompile("^organizations/(?P<organization_id>-|[\\w][\\w.-]{0,127})/roles/(?P<role_id>-|[a-zA-Z0-9-]{1,128})$")
    59  
    60  func (r *Role) MaybePopulateDefaults() error {
    61  	roleInterface := interface{}(r)
    62  	if defaulter, ok := roleInterface.(goten.Defaulter); ok {
    63  		return defaulter.PopulateDefaults()
    64  	}
    65  	return nil
    66  }
    67  
    68  type Name struct {
    69  	ParentName
    70  	RoleId string `firestore:"roleId"`
    71  }
    72  
    73  func ParseName(name string) (*Name, error) {
    74  	var matches []string
    75  	if matches = regexPath_Service.FindStringSubmatch(name); matches != nil {
    76  		return NewNameBuilder().
    77  			SetServiceId(matches[1]).
    78  			SetId(matches[2]).
    79  			Name(), nil
    80  	}
    81  	if matches = regexPath_Project.FindStringSubmatch(name); matches != nil {
    82  		return NewNameBuilder().
    83  			SetProjectId(matches[1]).
    84  			SetId(matches[2]).
    85  			Name(), nil
    86  	}
    87  	if matches = regexPath_Organization.FindStringSubmatch(name); matches != nil {
    88  		return NewNameBuilder().
    89  			SetOrganizationId(matches[1]).
    90  			SetId(matches[2]).
    91  			Name(), nil
    92  	}
    93  
    94  	return nil, status.Errorf(codes.InvalidArgument, "unable to parse '%s' as Role name", name)
    95  }
    96  
    97  func MustParseName(name string) *Name {
    98  	result, err := ParseName(name)
    99  	if err != nil {
   100  		panic(err)
   101  	}
   102  	return result
   103  }
   104  
   105  func ParseNameOrId(nameOrId string) (*Name, error) {
   106  	name, err := ParseName(nameOrId)
   107  	if err == nil {
   108  		return name, err
   109  	}
   110  	if role_RegexpId.MatchString(nameOrId) {
   111  		return &Name{RoleId: nameOrId}, nil
   112  	} else {
   113  		return nil, fmt.Errorf("unable to parse '%s' as Role name or id", nameOrId)
   114  	}
   115  }
   116  
   117  func (name *Name) SetFromSegments(segments gotenresource.NameSegments) error {
   118  	if len(segments) == 0 {
   119  		return status.Errorf(codes.InvalidArgument, "No segments given for Role name")
   120  	}
   121  	if err := name.ParentName.SetFromSegments(segments[:len(segments)-1]); err != nil {
   122  		return err
   123  	}
   124  	if segments[len(segments)-1].CollectionLowerJson != "roles" {
   125  		return status.Errorf(codes.InvalidArgument, "unable to use segments %s to form Role name", segments)
   126  	}
   127  	name.RoleId = segments[len(segments)-1].Id
   128  	return nil
   129  }
   130  
   131  func (name *Name) GetServiceName() *meta_service.Name {
   132  	if name == nil {
   133  		return nil
   134  	}
   135  	return name.ParentName.GetServiceName()
   136  }
   137  func (name *Name) GetProjectName() *project.Name {
   138  	if name == nil {
   139  		return nil
   140  	}
   141  	return name.ParentName.GetProjectName()
   142  }
   143  func (name *Name) GetOrganizationName() *organization.Name {
   144  	if name == nil {
   145  		return nil
   146  	}
   147  	return name.ParentName.GetOrganizationName()
   148  }
   149  
   150  func (name *Name) IsSpecified() bool {
   151  	if name == nil || name.Pattern == "" || name.RoleId == "" {
   152  		return false
   153  	}
   154  	return name.ParentName.IsSpecified()
   155  }
   156  
   157  func (name *Name) IsFullyQualified() bool {
   158  	if name == nil {
   159  		return false
   160  	}
   161  	if name.ParentName.IsFullyQualified() == false {
   162  		return false
   163  	}
   164  	if name.RoleId == "" || name.RoleId == gotenresource.WildcardId {
   165  		return false
   166  	}
   167  	return true
   168  }
   169  
   170  func (name *Name) FullyQualifiedName() (string, error) {
   171  	if !name.IsFullyQualified() {
   172  		return "", status.Errorf(codes.InvalidArgument, "Name for Role is not fully qualified")
   173  	}
   174  	return fmt.Sprintf("//iam.edgelq.com/%s", name.String()), nil
   175  }
   176  
   177  func (name *Name) String() string {
   178  	if name == nil {
   179  		return "<nil>"
   180  	}
   181  	if valueStr, err := name.ProtoString(); err != nil {
   182  		panic(err)
   183  	} else {
   184  		return valueStr
   185  	}
   186  }
   187  
   188  func (name *Name) AsReference() *Reference {
   189  	return &Reference{Name: *name}
   190  }
   191  
   192  func (name *Name) AsRawReference() gotenresource.Reference {
   193  	return name.AsReference()
   194  }
   195  
   196  func (name *Name) GetResourceDescriptor() gotenresource.Descriptor {
   197  	return descriptor
   198  }
   199  
   200  func (name *Name) GetPattern() gotenresource.NamePattern {
   201  	if name == nil {
   202  		return ""
   203  	}
   204  	return name.Pattern
   205  }
   206  
   207  func (name *Name) GetIdParts() map[string]string {
   208  	if name != nil {
   209  		return map[string]string{
   210  			"serviceId":      name.ServiceId,
   211  			"roleId":         name.RoleId,
   212  			"projectId":      name.ProjectId,
   213  			"organizationId": name.OrganizationId,
   214  		}
   215  	}
   216  	return map[string]string{
   217  		"serviceId":      "",
   218  		"roleId":         "",
   219  		"projectId":      "",
   220  		"organizationId": "",
   221  	}
   222  }
   223  
   224  func (name *Name) GetSegments() gotenresource.NameSegments {
   225  	if name == nil || name.Pattern == "" {
   226  		return nil
   227  	}
   228  	segments := name.ParentName.GetSegments()
   229  	return append(segments, gotenresource.NameSegment{
   230  		CollectionLowerJson: "roles",
   231  		Id:                  name.RoleId,
   232  	})
   233  }
   234  
   235  func (name *Name) GetIParentName() gotenresource.Name {
   236  	if name == nil {
   237  		return (*ParentName)(nil)
   238  	}
   239  	return &name.ParentName
   240  }
   241  
   242  func (name *Name) GetIUnderlyingParentName() gotenresource.Name {
   243  	if parentName := name.GetServiceName(); parentName != nil {
   244  		return parentName
   245  	}
   246  	if parentName := name.GetProjectName(); parentName != nil {
   247  		return parentName
   248  	}
   249  	if parentName := name.GetOrganizationName(); parentName != nil {
   250  		return parentName
   251  	}
   252  	return nil
   253  }
   254  
   255  // implement methods required by protobuf-go library for string-struct conversion
   256  
   257  func (name *Name) ProtoString() (string, error) {
   258  	if name == nil {
   259  		return "", nil
   260  	}
   261  	result := ""
   262  	parentPrefix, err := name.ParentName.ProtoString()
   263  	if err != nil {
   264  		return "", err
   265  	}
   266  	if parentPrefix != "" {
   267  		result += parentPrefix + "/"
   268  	}
   269  	result += "roles/" + name.RoleId
   270  	return result, nil
   271  }
   272  
   273  func (name *Name) ParseProtoString(data string) error {
   274  	parsed, err := ParseName(data)
   275  	if err != nil {
   276  		return err
   277  	}
   278  	*name = *parsed
   279  	return nil
   280  }
   281  
   282  // GotenEqual returns true if other is of same type and paths are equal (implements goten.Equaler interface)
   283  func (name *Name) GotenEqual(other interface{}) bool {
   284  	if other == nil {
   285  		return name == nil
   286  	}
   287  	other1, ok := other.(*Name)
   288  	if !ok {
   289  		other2, ok := other.(Name)
   290  		if ok {
   291  			other1 = &other2
   292  		} else {
   293  			return false
   294  		}
   295  	}
   296  	if other1 == nil {
   297  		return name == nil
   298  	} else if name == nil {
   299  		return false
   300  	}
   301  	if name.ParentName.GotenEqual(other1.ParentName) == false {
   302  		return false
   303  	}
   304  	if name.RoleId != other1.RoleId {
   305  		return false
   306  	}
   307  
   308  	return true
   309  }
   310  
   311  // Matches is same as GotenEqual, but also will accept "other" if name is wildcard.
   312  func (name *Name) Matches(other interface{}) bool {
   313  	if other == nil {
   314  		return name == nil
   315  	}
   316  	other1, ok := other.(*Name)
   317  	if !ok {
   318  		other2, ok := other.(Name)
   319  		if ok {
   320  			other1 = &other2
   321  		} else {
   322  			return false
   323  		}
   324  	}
   325  	if other1 == nil {
   326  		return name == nil
   327  	} else if name == nil {
   328  		return false
   329  	}
   330  	if name.ParentName.Matches(other1.ParentName) == false {
   331  		return false
   332  	}
   333  	if name.RoleId != other1.RoleId {
   334  		return name.RoleId == gotenresource.WildcardId
   335  	}
   336  
   337  	return true
   338  }
   339  
   340  // implement CustomTypeCliValue method
   341  func (name *Name) SetFromCliFlag(raw string) error {
   342  	parsedName, err := ParseName(raw)
   343  	if err != nil {
   344  		return err
   345  	}
   346  	*name = *parsedName
   347  	return nil
   348  }
   349  
   350  type Reference struct {
   351  	Name
   352  	role *Role
   353  }
   354  
   355  func MakeReference(name *Name, role *Role) (*Reference, error) {
   356  	return &Reference{
   357  		Name: *name,
   358  		role: role,
   359  	}, nil
   360  }
   361  
   362  func ParseReference(name string) (*Reference, error) {
   363  	parsedName, err := ParseName(name)
   364  	if err != nil {
   365  		return nil, err
   366  	}
   367  	return MakeReference(parsedName, nil)
   368  }
   369  
   370  func MustParseReference(name string) *Reference {
   371  	result, err := ParseReference(name)
   372  	if err != nil {
   373  		panic(err)
   374  	}
   375  	return result
   376  }
   377  
   378  func (ref *Reference) Resolve(resolved *Role) {
   379  	ref.role = resolved
   380  }
   381  
   382  func (ref *Reference) ResolveRaw(res gotenresource.Resource) error {
   383  	if res == nil {
   384  		ref.Resolve(nil)
   385  		return nil
   386  	}
   387  	if typedRes, ok := res.(*Role); ok {
   388  		ref.Resolve(typedRes)
   389  		return nil
   390  	}
   391  	return status.Errorf(codes.Internal, "Invalid resource type for Role: %s", reflect.TypeOf(res).Elem().Name())
   392  }
   393  
   394  func (ref *Reference) Resolved() bool {
   395  	return ref != nil && ref.role != nil
   396  }
   397  
   398  func (ref *Reference) ClearCached() {
   399  	ref.role = nil
   400  }
   401  
   402  func (ref *Reference) GetRole() *Role {
   403  	if ref == nil {
   404  		return nil
   405  	}
   406  	return ref.role
   407  }
   408  
   409  func (ref *Reference) GetRawResource() gotenresource.Resource {
   410  	if ref == nil {
   411  		return (*Role)(nil)
   412  	}
   413  	return ref.role
   414  }
   415  
   416  func (ref *Reference) IsFullyQualified() bool {
   417  	if ref == nil {
   418  		return false
   419  	}
   420  	return ref.Name.IsFullyQualified()
   421  }
   422  
   423  func (ref *Reference) IsSpecified() bool {
   424  	if ref == nil {
   425  		return false
   426  	}
   427  	return ref.Name.IsSpecified()
   428  }
   429  
   430  func (ref *Reference) FullyQualifiedName() (string, error) {
   431  	if !ref.IsFullyQualified() {
   432  		return "", status.Errorf(codes.InvalidArgument, "Name for Role is not fully qualified")
   433  	}
   434  	return fmt.Sprintf("//iam.edgelq.com/%s", ref.String()), nil
   435  }
   436  
   437  func (ref *Reference) GetResourceDescriptor() gotenresource.Descriptor {
   438  	return descriptor
   439  }
   440  
   441  func (ref *Reference) GetPattern() gotenresource.NamePattern {
   442  	if ref == nil {
   443  		return ""
   444  	}
   445  	return ref.Pattern
   446  }
   447  
   448  func (ref *Reference) GetIdParts() map[string]string {
   449  	if ref != nil {
   450  		return ref.Name.GetIdParts()
   451  	}
   452  	return map[string]string{
   453  		"serviceId":      "",
   454  		"roleId":         "",
   455  		"projectId":      "",
   456  		"organizationId": "",
   457  	}
   458  }
   459  
   460  func (ref *Reference) GetSegments() gotenresource.NameSegments {
   461  	if ref != nil {
   462  		return ref.Name.GetSegments()
   463  	}
   464  	return nil
   465  }
   466  
   467  func (ref *Reference) GetIParentName() gotenresource.Name {
   468  	if ref == nil {
   469  		return (*ParentName)(nil)
   470  	}
   471  	return ref.Name.GetIParentName()
   472  }
   473  
   474  func (ref *Reference) GetIUnderlyingParentName() gotenresource.Name {
   475  	if ref != nil {
   476  		return ref.Name.GetIUnderlyingParentName()
   477  	}
   478  	return nil
   479  }
   480  
   481  func (ref *Reference) String() string {
   482  	if ref == nil {
   483  		return "<nil>"
   484  	}
   485  	return ref.Name.String()
   486  }
   487  
   488  // implement methods required by protobuf-go library for string-struct conversion
   489  
   490  func (ref *Reference) ProtoString() (string, error) {
   491  	if ref == nil {
   492  		return "", nil
   493  	}
   494  	return ref.Name.ProtoString()
   495  }
   496  
   497  func (ref *Reference) ParseProtoString(data string) error {
   498  	parsed, err := ParseReference(data)
   499  	if err != nil {
   500  		return err
   501  	}
   502  	*ref = *parsed
   503  	return nil
   504  }
   505  
   506  // GotenEqual returns true if other is of same type and paths are equal (implements goten.Equaler interface)
   507  func (ref *Reference) GotenEqual(other interface{}) bool {
   508  	if other == nil {
   509  		return ref == nil
   510  	}
   511  	other1, ok := other.(*Reference)
   512  	if !ok {
   513  		other2, ok := other.(Reference)
   514  		if ok {
   515  			other1 = &other2
   516  		} else {
   517  			return false
   518  		}
   519  	}
   520  	if other1 == nil {
   521  		return ref == nil
   522  	} else if ref == nil {
   523  		return false
   524  	}
   525  
   526  	return ref.Name.GotenEqual(other1.Name)
   527  }
   528  
   529  // Matches is same as GotenEqual, but also will accept "other" if name is wildcard.
   530  func (name *Reference) Matches(other interface{}) bool {
   531  	if other == nil {
   532  		return name == nil
   533  	}
   534  	other1, ok := other.(*Reference)
   535  	if !ok {
   536  		other2, ok := other.(Reference)
   537  		if ok {
   538  			other1 = &other2
   539  		} else {
   540  			return false
   541  		}
   542  	}
   543  	if other1 == nil {
   544  		return name == nil
   545  	} else if name == nil {
   546  		return false
   547  	}
   548  	return name.Name.Matches(&other1.Name)
   549  }
   550  
   551  // implement CustomTypeCliValue method
   552  func (ref *Reference) SetFromCliFlag(raw string) error {
   553  	parsedRef, err := ParseReference(raw)
   554  	if err != nil {
   555  		return err
   556  	}
   557  	*ref = *parsedRef
   558  	return nil
   559  }