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 }