github.com/cloudwan/edgelq-sdk@v1.15.4/devices/resources/v1alpha2/device/device.pb.name.go (about)

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