github.com/cloudwan/edgelq-sdk@v1.15.4/devices/resources/v1/provisioning_policy/provisioning_policy.pb.fieldmask.go (about)

     1  // Code generated by protoc-gen-goten-object
     2  // File: edgelq/devices/proto/v1/provisioning_policy.proto
     3  // DO NOT EDIT!!!
     4  
     5  package provisioning_policy
     6  
     7  import (
     8  	"encoding/json"
     9  	"strings"
    10  
    11  	"google.golang.org/grpc/codes"
    12  	"google.golang.org/grpc/status"
    13  	"google.golang.org/protobuf/proto"
    14  	preflect "google.golang.org/protobuf/reflect/protoreflect"
    15  	googlefieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
    16  
    17  	gotenobject "github.com/cloudwan/goten-sdk/runtime/object"
    18  )
    19  
    20  // proto imports
    21  import (
    22  	device "github.com/cloudwan/edgelq-sdk/devices/resources/v1/device"
    23  	project "github.com/cloudwan/edgelq-sdk/devices/resources/v1/project"
    24  	iam_condition "github.com/cloudwan/edgelq-sdk/iam/resources/v1/condition"
    25  	iam_role "github.com/cloudwan/edgelq-sdk/iam/resources/v1/role"
    26  	iam_service_account "github.com/cloudwan/edgelq-sdk/iam/resources/v1/service_account"
    27  	meta "github.com/cloudwan/goten-sdk/types/meta"
    28  	structpb "google.golang.org/protobuf/types/known/structpb"
    29  )
    30  
    31  // ensure the imports are used
    32  var (
    33  	_ = new(json.Marshaler)
    34  	_ = strings.Builder{}
    35  
    36  	_ = codes.NotFound
    37  	_ = status.Status{}
    38  	_ = new(proto.Message)
    39  	_ = new(preflect.Message)
    40  	_ = googlefieldmaskpb.FieldMask{}
    41  
    42  	_ = new(gotenobject.FieldMask)
    43  )
    44  
    45  // make sure we're using proto imports
    46  var (
    47  	_ = &device.Device{}
    48  	_ = &project.Project{}
    49  	_ = &iam_condition.Condition{}
    50  	_ = &iam_role.Role{}
    51  	_ = &iam_service_account.ServiceAccount{}
    52  	_ = &structpb.Struct{}
    53  	_ = &meta.Meta{}
    54  )
    55  
    56  type ProvisioningPolicy_FieldMask struct {
    57  	Paths []ProvisioningPolicy_FieldPath
    58  }
    59  
    60  func FullProvisioningPolicy_FieldMask() *ProvisioningPolicy_FieldMask {
    61  	res := &ProvisioningPolicy_FieldMask{}
    62  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorName})
    63  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorMetadata})
    64  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorDisplayName})
    65  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorDescription})
    66  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorSpec})
    67  	res.Paths = append(res.Paths, &ProvisioningPolicy_FieldTerminalPath{selector: ProvisioningPolicy_FieldPathSelectorStatus})
    68  	return res
    69  }
    70  
    71  func (fieldMask *ProvisioningPolicy_FieldMask) String() string {
    72  	if fieldMask == nil {
    73  		return "<nil>"
    74  	}
    75  	pathsStr := make([]string, 0, len(fieldMask.Paths))
    76  	for _, path := range fieldMask.Paths {
    77  		pathsStr = append(pathsStr, path.String())
    78  	}
    79  	return strings.Join(pathsStr, ", ")
    80  }
    81  
    82  func (fieldMask *ProvisioningPolicy_FieldMask) IsFull() bool {
    83  	if fieldMask == nil {
    84  		return false
    85  	}
    86  	presentSelectors := make([]bool, 6)
    87  	for _, path := range fieldMask.Paths {
    88  		if asFinal, ok := path.(*ProvisioningPolicy_FieldTerminalPath); ok {
    89  			presentSelectors[int(asFinal.selector)] = true
    90  		}
    91  	}
    92  	for _, flag := range presentSelectors {
    93  		if !flag {
    94  			return false
    95  		}
    96  	}
    97  	return true
    98  }
    99  
   100  func (fieldMask *ProvisioningPolicy_FieldMask) ProtoReflect() preflect.Message {
   101  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   102  		return ParseProvisioningPolicy_FieldPath(raw)
   103  	})
   104  }
   105  
   106  func (fieldMask *ProvisioningPolicy_FieldMask) ProtoMessage() {}
   107  
   108  func (fieldMask *ProvisioningPolicy_FieldMask) Reset() {
   109  	if fieldMask != nil {
   110  		fieldMask.Paths = nil
   111  	}
   112  }
   113  
   114  func (fieldMask *ProvisioningPolicy_FieldMask) Subtract(other *ProvisioningPolicy_FieldMask) *ProvisioningPolicy_FieldMask {
   115  	result := &ProvisioningPolicy_FieldMask{}
   116  	removedSelectors := make([]bool, 6)
   117  	otherSubMasks := map[ProvisioningPolicy_FieldPathSelector]gotenobject.FieldMask{
   118  		ProvisioningPolicy_FieldPathSelectorMetadata: &meta.Meta_FieldMask{},
   119  		ProvisioningPolicy_FieldPathSelectorSpec:     &ProvisioningPolicy_Spec_FieldMask{},
   120  		ProvisioningPolicy_FieldPathSelectorStatus:   &ProvisioningPolicy_Status_FieldMask{},
   121  	}
   122  	mySubMasks := map[ProvisioningPolicy_FieldPathSelector]gotenobject.FieldMask{
   123  		ProvisioningPolicy_FieldPathSelectorMetadata: &meta.Meta_FieldMask{},
   124  		ProvisioningPolicy_FieldPathSelectorSpec:     &ProvisioningPolicy_Spec_FieldMask{},
   125  		ProvisioningPolicy_FieldPathSelectorStatus:   &ProvisioningPolicy_Status_FieldMask{},
   126  	}
   127  
   128  	for _, path := range other.GetPaths() {
   129  		switch tp := path.(type) {
   130  		case *ProvisioningPolicy_FieldTerminalPath:
   131  			removedSelectors[int(tp.selector)] = true
   132  		case *ProvisioningPolicy_FieldSubPath:
   133  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   134  		}
   135  	}
   136  	for _, path := range fieldMask.GetPaths() {
   137  		if !removedSelectors[int(path.Selector())] {
   138  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   139  				if tp, ok := path.(*ProvisioningPolicy_FieldTerminalPath); ok {
   140  					switch tp.selector {
   141  					case ProvisioningPolicy_FieldPathSelectorMetadata:
   142  						mySubMasks[ProvisioningPolicy_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask()
   143  					case ProvisioningPolicy_FieldPathSelectorSpec:
   144  						mySubMasks[ProvisioningPolicy_FieldPathSelectorSpec] = FullProvisioningPolicy_Spec_FieldMask()
   145  					case ProvisioningPolicy_FieldPathSelectorStatus:
   146  						mySubMasks[ProvisioningPolicy_FieldPathSelectorStatus] = FullProvisioningPolicy_Status_FieldMask()
   147  					}
   148  				} else if tp, ok := path.(*ProvisioningPolicy_FieldSubPath); ok {
   149  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   150  				}
   151  			} else {
   152  				result.Paths = append(result.Paths, path)
   153  			}
   154  		}
   155  	}
   156  	for selector, mySubMask := range mySubMasks {
   157  		if mySubMask.PathsCount() > 0 {
   158  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   159  				result.Paths = append(result.Paths, &ProvisioningPolicy_FieldSubPath{selector: selector, subPath: allowedPath})
   160  			}
   161  		}
   162  	}
   163  
   164  	if len(result.Paths) == 0 {
   165  		return nil
   166  	}
   167  	return result
   168  }
   169  
   170  func (fieldMask *ProvisioningPolicy_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   171  	return fieldMask.Subtract(other.(*ProvisioningPolicy_FieldMask))
   172  }
   173  
   174  // FilterInputFields generates copy of field paths with output_only field paths removed
   175  func (fieldMask *ProvisioningPolicy_FieldMask) FilterInputFields() *ProvisioningPolicy_FieldMask {
   176  	result := &ProvisioningPolicy_FieldMask{}
   177  	for _, path := range fieldMask.Paths {
   178  		switch path.Selector() {
   179  		case ProvisioningPolicy_FieldPathSelectorMetadata:
   180  			if _, ok := path.(*ProvisioningPolicy_FieldTerminalPath); ok {
   181  				for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths {
   182  					result.Paths = append(result.Paths, &ProvisioningPolicy_FieldSubPath{selector: path.Selector(), subPath: subpath})
   183  				}
   184  			} else if sub, ok := path.(*ProvisioningPolicy_FieldSubPath); ok {
   185  				selectedMask := &meta.Meta_FieldMask{
   186  					Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)},
   187  				}
   188  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   189  					result.Paths = append(result.Paths, &ProvisioningPolicy_FieldSubPath{selector: ProvisioningPolicy_FieldPathSelectorMetadata, subPath: allowedPath})
   190  				}
   191  			}
   192  		case ProvisioningPolicy_FieldPathSelectorSpec:
   193  			if _, ok := path.(*ProvisioningPolicy_FieldTerminalPath); ok {
   194  				for _, subpath := range FullProvisioningPolicy_Spec_FieldMask().FilterInputFields().Paths {
   195  					result.Paths = append(result.Paths, &ProvisioningPolicy_FieldSubPath{selector: path.Selector(), subPath: subpath})
   196  				}
   197  			} else if sub, ok := path.(*ProvisioningPolicy_FieldSubPath); ok {
   198  				selectedMask := &ProvisioningPolicy_Spec_FieldMask{
   199  					Paths: []ProvisioningPolicySpec_FieldPath{sub.subPath.(ProvisioningPolicySpec_FieldPath)},
   200  				}
   201  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   202  					result.Paths = append(result.Paths, &ProvisioningPolicy_FieldSubPath{selector: ProvisioningPolicy_FieldPathSelectorSpec, subPath: allowedPath})
   203  				}
   204  			}
   205  		default:
   206  			result.Paths = append(result.Paths, path)
   207  		}
   208  	}
   209  	return result
   210  }
   211  
   212  // ToFieldMask is used for proto conversions
   213  func (fieldMask *ProvisioningPolicy_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   214  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   215  	for _, path := range fieldMask.Paths {
   216  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   217  	}
   218  	return protoFieldMask
   219  }
   220  
   221  func (fieldMask *ProvisioningPolicy_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   222  	if fieldMask == nil {
   223  		return status.Error(codes.Internal, "target field mask is nil")
   224  	}
   225  	fieldMask.Paths = make([]ProvisioningPolicy_FieldPath, 0, len(protoFieldMask.Paths))
   226  	for _, strPath := range protoFieldMask.Paths {
   227  		path, err := ParseProvisioningPolicy_FieldPath(strPath)
   228  		if err != nil {
   229  			return err
   230  		}
   231  		fieldMask.Paths = append(fieldMask.Paths, path)
   232  	}
   233  	return nil
   234  }
   235  
   236  // implement methods required by customType
   237  func (fieldMask ProvisioningPolicy_FieldMask) Marshal() ([]byte, error) {
   238  	protoFieldMask := fieldMask.ToProtoFieldMask()
   239  	return proto.Marshal(protoFieldMask)
   240  }
   241  
   242  func (fieldMask *ProvisioningPolicy_FieldMask) Unmarshal(data []byte) error {
   243  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   244  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   245  		return err
   246  	}
   247  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   248  		return err
   249  	}
   250  	return nil
   251  }
   252  
   253  func (fieldMask *ProvisioningPolicy_FieldMask) Size() int {
   254  	return proto.Size(fieldMask.ToProtoFieldMask())
   255  }
   256  
   257  func (fieldMask ProvisioningPolicy_FieldMask) MarshalJSON() ([]byte, error) {
   258  	return json.Marshal(fieldMask.ToProtoFieldMask())
   259  }
   260  
   261  func (fieldMask *ProvisioningPolicy_FieldMask) UnmarshalJSON(data []byte) error {
   262  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   263  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   264  		return err
   265  	}
   266  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   267  		return err
   268  	}
   269  	return nil
   270  }
   271  
   272  func (fieldMask *ProvisioningPolicy_FieldMask) AppendPath(path ProvisioningPolicy_FieldPath) {
   273  	fieldMask.Paths = append(fieldMask.Paths, path)
   274  }
   275  
   276  func (fieldMask *ProvisioningPolicy_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   277  	fieldMask.Paths = append(fieldMask.Paths, path.(ProvisioningPolicy_FieldPath))
   278  }
   279  
   280  func (fieldMask *ProvisioningPolicy_FieldMask) GetPaths() []ProvisioningPolicy_FieldPath {
   281  	if fieldMask == nil {
   282  		return nil
   283  	}
   284  	return fieldMask.Paths
   285  }
   286  
   287  func (fieldMask *ProvisioningPolicy_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   288  	if fieldMask == nil {
   289  		return nil
   290  	}
   291  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   292  	for _, path := range fieldMask.Paths {
   293  		rawPaths = append(rawPaths, path)
   294  	}
   295  	return rawPaths
   296  }
   297  
   298  func (fieldMask *ProvisioningPolicy_FieldMask) SetFromCliFlag(raw string) error {
   299  	path, err := ParseProvisioningPolicy_FieldPath(raw)
   300  	if err != nil {
   301  		return err
   302  	}
   303  	fieldMask.Paths = append(fieldMask.Paths, path)
   304  	return nil
   305  }
   306  
   307  func (fieldMask *ProvisioningPolicy_FieldMask) Set(target, source *ProvisioningPolicy) {
   308  	for _, path := range fieldMask.Paths {
   309  		val, _ := path.GetSingle(source)
   310  		// if val is nil, then field does not exist in source, skip
   311  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   312  		if val != nil {
   313  			path.WithIValue(val).SetTo(&target)
   314  		}
   315  	}
   316  }
   317  
   318  func (fieldMask *ProvisioningPolicy_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   319  	fieldMask.Set(target.(*ProvisioningPolicy), source.(*ProvisioningPolicy))
   320  }
   321  
   322  func (fieldMask *ProvisioningPolicy_FieldMask) Project(source *ProvisioningPolicy) *ProvisioningPolicy {
   323  	if source == nil {
   324  		return nil
   325  	}
   326  	if fieldMask == nil {
   327  		return source
   328  	}
   329  	result := &ProvisioningPolicy{}
   330  	metadataMask := &meta.Meta_FieldMask{}
   331  	wholeMetadataAccepted := false
   332  	specMask := &ProvisioningPolicy_Spec_FieldMask{}
   333  	wholeSpecAccepted := false
   334  	statusMask := &ProvisioningPolicy_Status_FieldMask{}
   335  	wholeStatusAccepted := false
   336  
   337  	for _, p := range fieldMask.Paths {
   338  		switch tp := p.(type) {
   339  		case *ProvisioningPolicy_FieldTerminalPath:
   340  			switch tp.selector {
   341  			case ProvisioningPolicy_FieldPathSelectorName:
   342  				result.Name = source.Name
   343  			case ProvisioningPolicy_FieldPathSelectorMetadata:
   344  				result.Metadata = source.Metadata
   345  				wholeMetadataAccepted = true
   346  			case ProvisioningPolicy_FieldPathSelectorDisplayName:
   347  				result.DisplayName = source.DisplayName
   348  			case ProvisioningPolicy_FieldPathSelectorDescription:
   349  				result.Description = source.Description
   350  			case ProvisioningPolicy_FieldPathSelectorSpec:
   351  				result.Spec = source.Spec
   352  				wholeSpecAccepted = true
   353  			case ProvisioningPolicy_FieldPathSelectorStatus:
   354  				result.Status = source.Status
   355  				wholeStatusAccepted = true
   356  			}
   357  		case *ProvisioningPolicy_FieldSubPath:
   358  			switch tp.selector {
   359  			case ProvisioningPolicy_FieldPathSelectorMetadata:
   360  				metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath))
   361  			case ProvisioningPolicy_FieldPathSelectorSpec:
   362  				specMask.AppendPath(tp.subPath.(ProvisioningPolicySpec_FieldPath))
   363  			case ProvisioningPolicy_FieldPathSelectorStatus:
   364  				statusMask.AppendPath(tp.subPath.(ProvisioningPolicyStatus_FieldPath))
   365  			}
   366  		}
   367  	}
   368  	if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 {
   369  		result.Metadata = metadataMask.Project(source.GetMetadata())
   370  	}
   371  	if wholeSpecAccepted == false && len(specMask.Paths) > 0 {
   372  		result.Spec = specMask.Project(source.GetSpec())
   373  	}
   374  	if wholeStatusAccepted == false && len(statusMask.Paths) > 0 {
   375  		result.Status = statusMask.Project(source.GetStatus())
   376  	}
   377  	return result
   378  }
   379  
   380  func (fieldMask *ProvisioningPolicy_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   381  	return fieldMask.Project(source.(*ProvisioningPolicy))
   382  }
   383  
   384  func (fieldMask *ProvisioningPolicy_FieldMask) PathsCount() int {
   385  	if fieldMask == nil {
   386  		return 0
   387  	}
   388  	return len(fieldMask.Paths)
   389  }
   390  
   391  type ProvisioningPolicy_Spec_FieldMask struct {
   392  	Paths []ProvisioningPolicySpec_FieldPath
   393  }
   394  
   395  func FullProvisioningPolicy_Spec_FieldMask() *ProvisioningPolicy_Spec_FieldMask {
   396  	res := &ProvisioningPolicy_Spec_FieldMask{}
   397  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorMode})
   398  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorServiceAccount})
   399  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorDeviceNameFormat})
   400  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorDeviceDisplayNameFormat})
   401  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorLabels})
   402  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorTemplate})
   403  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorIdentityFieldPaths})
   404  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorRole})
   405  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorScopeParams})
   406  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorCondition})
   407  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorConditionParams})
   408  	res.Paths = append(res.Paths, &ProvisioningPolicySpec_FieldTerminalPath{selector: ProvisioningPolicySpec_FieldPathSelectorExtraConditions})
   409  	return res
   410  }
   411  
   412  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) String() string {
   413  	if fieldMask == nil {
   414  		return "<nil>"
   415  	}
   416  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   417  	for _, path := range fieldMask.Paths {
   418  		pathsStr = append(pathsStr, path.String())
   419  	}
   420  	return strings.Join(pathsStr, ", ")
   421  }
   422  
   423  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) IsFull() bool {
   424  	if fieldMask == nil {
   425  		return false
   426  	}
   427  	presentSelectors := make([]bool, 12)
   428  	for _, path := range fieldMask.Paths {
   429  		if asFinal, ok := path.(*ProvisioningPolicySpec_FieldTerminalPath); ok {
   430  			presentSelectors[int(asFinal.selector)] = true
   431  		}
   432  	}
   433  	for _, flag := range presentSelectors {
   434  		if !flag {
   435  			return false
   436  		}
   437  	}
   438  	return true
   439  }
   440  
   441  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) ProtoReflect() preflect.Message {
   442  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   443  		return ParseProvisioningPolicySpec_FieldPath(raw)
   444  	})
   445  }
   446  
   447  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) ProtoMessage() {}
   448  
   449  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Reset() {
   450  	if fieldMask != nil {
   451  		fieldMask.Paths = nil
   452  	}
   453  }
   454  
   455  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Subtract(other *ProvisioningPolicy_Spec_FieldMask) *ProvisioningPolicy_Spec_FieldMask {
   456  	result := &ProvisioningPolicy_Spec_FieldMask{}
   457  	removedSelectors := make([]bool, 12)
   458  	otherSubMasks := map[ProvisioningPolicySpec_FieldPathSelector]gotenobject.FieldMask{
   459  		ProvisioningPolicySpec_FieldPathSelectorTemplate:        &ProvisioningPolicy_Spec_Template_FieldMask{},
   460  		ProvisioningPolicySpec_FieldPathSelectorScopeParams:     &iam_role.ScopeParam_FieldMask{},
   461  		ProvisioningPolicySpec_FieldPathSelectorExtraConditions: &iam_condition.ExecutableCondition_FieldMask{},
   462  	}
   463  	mySubMasks := map[ProvisioningPolicySpec_FieldPathSelector]gotenobject.FieldMask{
   464  		ProvisioningPolicySpec_FieldPathSelectorTemplate:        &ProvisioningPolicy_Spec_Template_FieldMask{},
   465  		ProvisioningPolicySpec_FieldPathSelectorScopeParams:     &iam_role.ScopeParam_FieldMask{},
   466  		ProvisioningPolicySpec_FieldPathSelectorExtraConditions: &iam_condition.ExecutableCondition_FieldMask{},
   467  	}
   468  
   469  	for _, path := range other.GetPaths() {
   470  		switch tp := path.(type) {
   471  		case *ProvisioningPolicySpec_FieldTerminalPath:
   472  			removedSelectors[int(tp.selector)] = true
   473  		case *ProvisioningPolicySpec_FieldSubPath:
   474  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   475  		}
   476  	}
   477  	for _, path := range fieldMask.GetPaths() {
   478  		if !removedSelectors[int(path.Selector())] {
   479  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   480  				if tp, ok := path.(*ProvisioningPolicySpec_FieldTerminalPath); ok {
   481  					switch tp.selector {
   482  					case ProvisioningPolicySpec_FieldPathSelectorTemplate:
   483  						mySubMasks[ProvisioningPolicySpec_FieldPathSelectorTemplate] = FullProvisioningPolicy_Spec_Template_FieldMask()
   484  					case ProvisioningPolicySpec_FieldPathSelectorScopeParams:
   485  						mySubMasks[ProvisioningPolicySpec_FieldPathSelectorScopeParams] = iam_role.FullScopeParam_FieldMask()
   486  					case ProvisioningPolicySpec_FieldPathSelectorExtraConditions:
   487  						mySubMasks[ProvisioningPolicySpec_FieldPathSelectorExtraConditions] = iam_condition.FullExecutableCondition_FieldMask()
   488  					}
   489  				} else if tp, ok := path.(*ProvisioningPolicySpec_FieldSubPath); ok {
   490  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   491  				}
   492  			} else {
   493  				result.Paths = append(result.Paths, path)
   494  			}
   495  		}
   496  	}
   497  	for selector, mySubMask := range mySubMasks {
   498  		if mySubMask.PathsCount() > 0 {
   499  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   500  				result.Paths = append(result.Paths, &ProvisioningPolicySpec_FieldSubPath{selector: selector, subPath: allowedPath})
   501  			}
   502  		}
   503  	}
   504  
   505  	if len(result.Paths) == 0 {
   506  		return nil
   507  	}
   508  	return result
   509  }
   510  
   511  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   512  	return fieldMask.Subtract(other.(*ProvisioningPolicy_Spec_FieldMask))
   513  }
   514  
   515  // FilterInputFields generates copy of field paths with output_only field paths removed
   516  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) FilterInputFields() *ProvisioningPolicy_Spec_FieldMask {
   517  	result := &ProvisioningPolicy_Spec_FieldMask{}
   518  	for _, path := range fieldMask.Paths {
   519  		switch path.Selector() {
   520  		case ProvisioningPolicySpec_FieldPathSelectorTemplate:
   521  			if _, ok := path.(*ProvisioningPolicySpec_FieldTerminalPath); ok {
   522  				for _, subpath := range FullProvisioningPolicy_Spec_Template_FieldMask().FilterInputFields().Paths {
   523  					result.Paths = append(result.Paths, &ProvisioningPolicySpec_FieldSubPath{selector: path.Selector(), subPath: subpath})
   524  				}
   525  			} else if sub, ok := path.(*ProvisioningPolicySpec_FieldSubPath); ok {
   526  				selectedMask := &ProvisioningPolicy_Spec_Template_FieldMask{
   527  					Paths: []ProvisioningPolicySpecTemplate_FieldPath{sub.subPath.(ProvisioningPolicySpecTemplate_FieldPath)},
   528  				}
   529  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   530  					result.Paths = append(result.Paths, &ProvisioningPolicySpec_FieldSubPath{selector: ProvisioningPolicySpec_FieldPathSelectorTemplate, subPath: allowedPath})
   531  				}
   532  			}
   533  		default:
   534  			result.Paths = append(result.Paths, path)
   535  		}
   536  	}
   537  	return result
   538  }
   539  
   540  // ToFieldMask is used for proto conversions
   541  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   542  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   543  	for _, path := range fieldMask.Paths {
   544  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   545  	}
   546  	return protoFieldMask
   547  }
   548  
   549  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   550  	if fieldMask == nil {
   551  		return status.Error(codes.Internal, "target field mask is nil")
   552  	}
   553  	fieldMask.Paths = make([]ProvisioningPolicySpec_FieldPath, 0, len(protoFieldMask.Paths))
   554  	for _, strPath := range protoFieldMask.Paths {
   555  		path, err := ParseProvisioningPolicySpec_FieldPath(strPath)
   556  		if err != nil {
   557  			return err
   558  		}
   559  		fieldMask.Paths = append(fieldMask.Paths, path)
   560  	}
   561  	return nil
   562  }
   563  
   564  // implement methods required by customType
   565  func (fieldMask ProvisioningPolicy_Spec_FieldMask) Marshal() ([]byte, error) {
   566  	protoFieldMask := fieldMask.ToProtoFieldMask()
   567  	return proto.Marshal(protoFieldMask)
   568  }
   569  
   570  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Unmarshal(data []byte) error {
   571  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   572  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   573  		return err
   574  	}
   575  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   576  		return err
   577  	}
   578  	return nil
   579  }
   580  
   581  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Size() int {
   582  	return proto.Size(fieldMask.ToProtoFieldMask())
   583  }
   584  
   585  func (fieldMask ProvisioningPolicy_Spec_FieldMask) MarshalJSON() ([]byte, error) {
   586  	return json.Marshal(fieldMask.ToProtoFieldMask())
   587  }
   588  
   589  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) UnmarshalJSON(data []byte) error {
   590  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   591  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   592  		return err
   593  	}
   594  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   595  		return err
   596  	}
   597  	return nil
   598  }
   599  
   600  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) AppendPath(path ProvisioningPolicySpec_FieldPath) {
   601  	fieldMask.Paths = append(fieldMask.Paths, path)
   602  }
   603  
   604  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   605  	fieldMask.Paths = append(fieldMask.Paths, path.(ProvisioningPolicySpec_FieldPath))
   606  }
   607  
   608  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) GetPaths() []ProvisioningPolicySpec_FieldPath {
   609  	if fieldMask == nil {
   610  		return nil
   611  	}
   612  	return fieldMask.Paths
   613  }
   614  
   615  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   616  	if fieldMask == nil {
   617  		return nil
   618  	}
   619  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   620  	for _, path := range fieldMask.Paths {
   621  		rawPaths = append(rawPaths, path)
   622  	}
   623  	return rawPaths
   624  }
   625  
   626  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) SetFromCliFlag(raw string) error {
   627  	path, err := ParseProvisioningPolicySpec_FieldPath(raw)
   628  	if err != nil {
   629  		return err
   630  	}
   631  	fieldMask.Paths = append(fieldMask.Paths, path)
   632  	return nil
   633  }
   634  
   635  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Set(target, source *ProvisioningPolicy_Spec) {
   636  	for _, path := range fieldMask.Paths {
   637  		val, _ := path.GetSingle(source)
   638  		// if val is nil, then field does not exist in source, skip
   639  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   640  		if val != nil {
   641  			path.WithIValue(val).SetTo(&target)
   642  		}
   643  	}
   644  }
   645  
   646  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   647  	fieldMask.Set(target.(*ProvisioningPolicy_Spec), source.(*ProvisioningPolicy_Spec))
   648  }
   649  
   650  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) Project(source *ProvisioningPolicy_Spec) *ProvisioningPolicy_Spec {
   651  	if source == nil {
   652  		return nil
   653  	}
   654  	if fieldMask == nil {
   655  		return source
   656  	}
   657  	result := &ProvisioningPolicy_Spec{}
   658  	templateMask := &ProvisioningPolicy_Spec_Template_FieldMask{}
   659  	wholeTemplateAccepted := false
   660  	scopeParamsMask := &iam_role.ScopeParam_FieldMask{}
   661  	wholeScopeParamsAccepted := false
   662  	extraConditionsMask := &iam_condition.ExecutableCondition_FieldMask{}
   663  	wholeExtraConditionsAccepted := false
   664  	var labelsMapKeys []string
   665  	wholeLabelsAccepted := false
   666  
   667  	for _, p := range fieldMask.Paths {
   668  		switch tp := p.(type) {
   669  		case *ProvisioningPolicySpec_FieldTerminalPath:
   670  			switch tp.selector {
   671  			case ProvisioningPolicySpec_FieldPathSelectorMode:
   672  				result.Mode = source.Mode
   673  			case ProvisioningPolicySpec_FieldPathSelectorServiceAccount:
   674  				result.ServiceAccount = source.ServiceAccount
   675  			case ProvisioningPolicySpec_FieldPathSelectorDeviceNameFormat:
   676  				result.DeviceNameFormat = source.DeviceNameFormat
   677  			case ProvisioningPolicySpec_FieldPathSelectorDeviceDisplayNameFormat:
   678  				result.DeviceDisplayNameFormat = source.DeviceDisplayNameFormat
   679  			case ProvisioningPolicySpec_FieldPathSelectorLabels:
   680  				result.Labels = source.Labels
   681  				wholeLabelsAccepted = true
   682  			case ProvisioningPolicySpec_FieldPathSelectorTemplate:
   683  				result.Template = source.Template
   684  				wholeTemplateAccepted = true
   685  			case ProvisioningPolicySpec_FieldPathSelectorIdentityFieldPaths:
   686  				result.IdentityFieldPaths = source.IdentityFieldPaths
   687  			case ProvisioningPolicySpec_FieldPathSelectorRole:
   688  				result.Role = source.Role
   689  			case ProvisioningPolicySpec_FieldPathSelectorScopeParams:
   690  				result.ScopeParams = source.ScopeParams
   691  				wholeScopeParamsAccepted = true
   692  			case ProvisioningPolicySpec_FieldPathSelectorCondition:
   693  				result.Condition = source.Condition
   694  			case ProvisioningPolicySpec_FieldPathSelectorConditionParams:
   695  				result.ConditionParams = source.ConditionParams
   696  			case ProvisioningPolicySpec_FieldPathSelectorExtraConditions:
   697  				result.ExtraConditions = source.ExtraConditions
   698  				wholeExtraConditionsAccepted = true
   699  			}
   700  		case *ProvisioningPolicySpec_FieldSubPath:
   701  			switch tp.selector {
   702  			case ProvisioningPolicySpec_FieldPathSelectorTemplate:
   703  				templateMask.AppendPath(tp.subPath.(ProvisioningPolicySpecTemplate_FieldPath))
   704  			case ProvisioningPolicySpec_FieldPathSelectorScopeParams:
   705  				scopeParamsMask.AppendPath(tp.subPath.(iam_role.ScopeParam_FieldPath))
   706  			case ProvisioningPolicySpec_FieldPathSelectorExtraConditions:
   707  				extraConditionsMask.AppendPath(tp.subPath.(iam_condition.ExecutableCondition_FieldPath))
   708  			}
   709  		case *ProvisioningPolicySpec_FieldPathMap:
   710  			switch tp.selector {
   711  			case ProvisioningPolicySpec_FieldPathSelectorLabels:
   712  				labelsMapKeys = append(labelsMapKeys, tp.key)
   713  			}
   714  		}
   715  	}
   716  	if wholeLabelsAccepted == false && len(labelsMapKeys) > 0 && source.GetLabels() != nil {
   717  		copiedMap := map[string]string{}
   718  		sourceMap := source.GetLabels()
   719  		for _, key := range labelsMapKeys {
   720  			copiedMap[key] = sourceMap[key]
   721  		}
   722  		result.Labels = copiedMap
   723  	}
   724  	if wholeTemplateAccepted == false && len(templateMask.Paths) > 0 {
   725  		result.Template = templateMask.Project(source.GetTemplate())
   726  	}
   727  	if wholeScopeParamsAccepted == false && len(scopeParamsMask.Paths) > 0 {
   728  		for _, sourceItem := range source.GetScopeParams() {
   729  			result.ScopeParams = append(result.ScopeParams, scopeParamsMask.Project(sourceItem))
   730  		}
   731  	}
   732  	if wholeExtraConditionsAccepted == false && len(extraConditionsMask.Paths) > 0 {
   733  		for _, sourceItem := range source.GetExtraConditions() {
   734  			result.ExtraConditions = append(result.ExtraConditions, extraConditionsMask.Project(sourceItem))
   735  		}
   736  	}
   737  	return result
   738  }
   739  
   740  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   741  	return fieldMask.Project(source.(*ProvisioningPolicy_Spec))
   742  }
   743  
   744  func (fieldMask *ProvisioningPolicy_Spec_FieldMask) PathsCount() int {
   745  	if fieldMask == nil {
   746  		return 0
   747  	}
   748  	return len(fieldMask.Paths)
   749  }
   750  
   751  type ProvisioningPolicy_Status_FieldMask struct {
   752  	Paths []ProvisioningPolicyStatus_FieldPath
   753  }
   754  
   755  func FullProvisioningPolicy_Status_FieldMask() *ProvisioningPolicy_Status_FieldMask {
   756  	res := &ProvisioningPolicy_Status_FieldMask{}
   757  	return res
   758  }
   759  
   760  func (fieldMask *ProvisioningPolicy_Status_FieldMask) String() string {
   761  	if fieldMask == nil {
   762  		return "<nil>"
   763  	}
   764  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   765  	for _, path := range fieldMask.Paths {
   766  		pathsStr = append(pathsStr, path.String())
   767  	}
   768  	return strings.Join(pathsStr, ", ")
   769  }
   770  
   771  func (fieldMask *ProvisioningPolicy_Status_FieldMask) IsFull() bool {
   772  	if fieldMask == nil {
   773  		return false
   774  	}
   775  	presentSelectors := make([]bool, 0)
   776  	for _, path := range fieldMask.Paths {
   777  		if asFinal, ok := path.(*ProvisioningPolicyStatus_FieldTerminalPath); ok {
   778  			presentSelectors[int(asFinal.selector)] = true
   779  		}
   780  	}
   781  	for _, flag := range presentSelectors {
   782  		if !flag {
   783  			return false
   784  		}
   785  	}
   786  	return true
   787  }
   788  
   789  func (fieldMask *ProvisioningPolicy_Status_FieldMask) ProtoReflect() preflect.Message {
   790  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   791  		return ParseProvisioningPolicyStatus_FieldPath(raw)
   792  	})
   793  }
   794  
   795  func (fieldMask *ProvisioningPolicy_Status_FieldMask) ProtoMessage() {}
   796  
   797  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Reset() {
   798  	if fieldMask != nil {
   799  		fieldMask.Paths = nil
   800  	}
   801  }
   802  
   803  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Subtract(other *ProvisioningPolicy_Status_FieldMask) *ProvisioningPolicy_Status_FieldMask {
   804  	result := &ProvisioningPolicy_Status_FieldMask{}
   805  	removedSelectors := make([]bool, 0)
   806  
   807  	for _, path := range other.GetPaths() {
   808  		switch tp := path.(type) {
   809  		case *ProvisioningPolicyStatus_FieldTerminalPath:
   810  			removedSelectors[int(tp.selector)] = true
   811  		}
   812  	}
   813  	for _, path := range fieldMask.GetPaths() {
   814  		if !removedSelectors[int(path.Selector())] {
   815  			result.Paths = append(result.Paths, path)
   816  		}
   817  	}
   818  
   819  	if len(result.Paths) == 0 {
   820  		return nil
   821  	}
   822  	return result
   823  }
   824  
   825  func (fieldMask *ProvisioningPolicy_Status_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   826  	return fieldMask.Subtract(other.(*ProvisioningPolicy_Status_FieldMask))
   827  }
   828  
   829  // FilterInputFields generates copy of field paths with output_only field paths removed
   830  func (fieldMask *ProvisioningPolicy_Status_FieldMask) FilterInputFields() *ProvisioningPolicy_Status_FieldMask {
   831  	result := &ProvisioningPolicy_Status_FieldMask{}
   832  	result.Paths = append(result.Paths, fieldMask.Paths...)
   833  	return result
   834  }
   835  
   836  // ToFieldMask is used for proto conversions
   837  func (fieldMask *ProvisioningPolicy_Status_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   838  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   839  	for _, path := range fieldMask.Paths {
   840  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   841  	}
   842  	return protoFieldMask
   843  }
   844  
   845  func (fieldMask *ProvisioningPolicy_Status_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   846  	if fieldMask == nil {
   847  		return status.Error(codes.Internal, "target field mask is nil")
   848  	}
   849  	fieldMask.Paths = make([]ProvisioningPolicyStatus_FieldPath, 0, len(protoFieldMask.Paths))
   850  	for _, strPath := range protoFieldMask.Paths {
   851  		path, err := ParseProvisioningPolicyStatus_FieldPath(strPath)
   852  		if err != nil {
   853  			return err
   854  		}
   855  		fieldMask.Paths = append(fieldMask.Paths, path)
   856  	}
   857  	return nil
   858  }
   859  
   860  // implement methods required by customType
   861  func (fieldMask ProvisioningPolicy_Status_FieldMask) Marshal() ([]byte, error) {
   862  	protoFieldMask := fieldMask.ToProtoFieldMask()
   863  	return proto.Marshal(protoFieldMask)
   864  }
   865  
   866  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Unmarshal(data []byte) error {
   867  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   868  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   869  		return err
   870  	}
   871  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   872  		return err
   873  	}
   874  	return nil
   875  }
   876  
   877  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Size() int {
   878  	return proto.Size(fieldMask.ToProtoFieldMask())
   879  }
   880  
   881  func (fieldMask ProvisioningPolicy_Status_FieldMask) MarshalJSON() ([]byte, error) {
   882  	return json.Marshal(fieldMask.ToProtoFieldMask())
   883  }
   884  
   885  func (fieldMask *ProvisioningPolicy_Status_FieldMask) UnmarshalJSON(data []byte) error {
   886  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   887  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   888  		return err
   889  	}
   890  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   891  		return err
   892  	}
   893  	return nil
   894  }
   895  
   896  func (fieldMask *ProvisioningPolicy_Status_FieldMask) AppendPath(path ProvisioningPolicyStatus_FieldPath) {
   897  	fieldMask.Paths = append(fieldMask.Paths, path)
   898  }
   899  
   900  func (fieldMask *ProvisioningPolicy_Status_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   901  	fieldMask.Paths = append(fieldMask.Paths, path.(ProvisioningPolicyStatus_FieldPath))
   902  }
   903  
   904  func (fieldMask *ProvisioningPolicy_Status_FieldMask) GetPaths() []ProvisioningPolicyStatus_FieldPath {
   905  	if fieldMask == nil {
   906  		return nil
   907  	}
   908  	return fieldMask.Paths
   909  }
   910  
   911  func (fieldMask *ProvisioningPolicy_Status_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   912  	if fieldMask == nil {
   913  		return nil
   914  	}
   915  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   916  	for _, path := range fieldMask.Paths {
   917  		rawPaths = append(rawPaths, path)
   918  	}
   919  	return rawPaths
   920  }
   921  
   922  func (fieldMask *ProvisioningPolicy_Status_FieldMask) SetFromCliFlag(raw string) error {
   923  	path, err := ParseProvisioningPolicyStatus_FieldPath(raw)
   924  	if err != nil {
   925  		return err
   926  	}
   927  	fieldMask.Paths = append(fieldMask.Paths, path)
   928  	return nil
   929  }
   930  
   931  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Set(target, source *ProvisioningPolicy_Status) {
   932  	for _, path := range fieldMask.Paths {
   933  		val, _ := path.GetSingle(source)
   934  		// if val is nil, then field does not exist in source, skip
   935  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   936  		if val != nil {
   937  			path.WithIValue(val).SetTo(&target)
   938  		}
   939  	}
   940  }
   941  
   942  func (fieldMask *ProvisioningPolicy_Status_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   943  	fieldMask.Set(target.(*ProvisioningPolicy_Status), source.(*ProvisioningPolicy_Status))
   944  }
   945  
   946  func (fieldMask *ProvisioningPolicy_Status_FieldMask) Project(source *ProvisioningPolicy_Status) *ProvisioningPolicy_Status {
   947  	if source == nil {
   948  		return nil
   949  	}
   950  	if fieldMask == nil {
   951  		return source
   952  	}
   953  	result := &ProvisioningPolicy_Status{}
   954  
   955  	for _, p := range fieldMask.Paths {
   956  		switch tp := p.(type) {
   957  		case *ProvisioningPolicyStatus_FieldTerminalPath:
   958  			switch tp.selector {
   959  			}
   960  		}
   961  	}
   962  	return result
   963  }
   964  
   965  func (fieldMask *ProvisioningPolicy_Status_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   966  	return fieldMask.Project(source.(*ProvisioningPolicy_Status))
   967  }
   968  
   969  func (fieldMask *ProvisioningPolicy_Status_FieldMask) PathsCount() int {
   970  	if fieldMask == nil {
   971  		return 0
   972  	}
   973  	return len(fieldMask.Paths)
   974  }
   975  
   976  type ProvisioningPolicy_Spec_Template_FieldMask struct {
   977  	Paths []ProvisioningPolicySpecTemplate_FieldPath
   978  }
   979  
   980  func FullProvisioningPolicy_Spec_Template_FieldMask() *ProvisioningPolicy_Spec_Template_FieldMask {
   981  	res := &ProvisioningPolicy_Spec_Template_FieldMask{}
   982  	res.Paths = append(res.Paths, &ProvisioningPolicySpecTemplate_FieldTerminalPath{selector: ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata})
   983  	res.Paths = append(res.Paths, &ProvisioningPolicySpecTemplate_FieldTerminalPath{selector: ProvisioningPolicySpecTemplate_FieldPathSelectorSpec})
   984  	res.Paths = append(res.Paths, &ProvisioningPolicySpecTemplate_FieldTerminalPath{selector: ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec})
   985  	return res
   986  }
   987  
   988  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) String() string {
   989  	if fieldMask == nil {
   990  		return "<nil>"
   991  	}
   992  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   993  	for _, path := range fieldMask.Paths {
   994  		pathsStr = append(pathsStr, path.String())
   995  	}
   996  	return strings.Join(pathsStr, ", ")
   997  }
   998  
   999  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) IsFull() bool {
  1000  	if fieldMask == nil {
  1001  		return false
  1002  	}
  1003  	presentSelectors := make([]bool, 3)
  1004  	for _, path := range fieldMask.Paths {
  1005  		if asFinal, ok := path.(*ProvisioningPolicySpecTemplate_FieldTerminalPath); ok {
  1006  			presentSelectors[int(asFinal.selector)] = true
  1007  		}
  1008  	}
  1009  	for _, flag := range presentSelectors {
  1010  		if !flag {
  1011  			return false
  1012  		}
  1013  	}
  1014  	return true
  1015  }
  1016  
  1017  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) ProtoReflect() preflect.Message {
  1018  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
  1019  		return ParseProvisioningPolicySpecTemplate_FieldPath(raw)
  1020  	})
  1021  }
  1022  
  1023  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) ProtoMessage() {}
  1024  
  1025  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Reset() {
  1026  	if fieldMask != nil {
  1027  		fieldMask.Paths = nil
  1028  	}
  1029  }
  1030  
  1031  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Subtract(other *ProvisioningPolicy_Spec_Template_FieldMask) *ProvisioningPolicy_Spec_Template_FieldMask {
  1032  	result := &ProvisioningPolicy_Spec_Template_FieldMask{}
  1033  	removedSelectors := make([]bool, 3)
  1034  	otherSubMasks := map[ProvisioningPolicySpecTemplate_FieldPathSelector]gotenobject.FieldMask{
  1035  		ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:          &meta.Meta_FieldMask{},
  1036  		ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:              &device.Device_Spec_FieldMask{},
  1037  		ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec: &device.Device_PublicListingSpec_FieldMask{},
  1038  	}
  1039  	mySubMasks := map[ProvisioningPolicySpecTemplate_FieldPathSelector]gotenobject.FieldMask{
  1040  		ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:          &meta.Meta_FieldMask{},
  1041  		ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:              &device.Device_Spec_FieldMask{},
  1042  		ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec: &device.Device_PublicListingSpec_FieldMask{},
  1043  	}
  1044  
  1045  	for _, path := range other.GetPaths() {
  1046  		switch tp := path.(type) {
  1047  		case *ProvisioningPolicySpecTemplate_FieldTerminalPath:
  1048  			removedSelectors[int(tp.selector)] = true
  1049  		case *ProvisioningPolicySpecTemplate_FieldSubPath:
  1050  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
  1051  		}
  1052  	}
  1053  	for _, path := range fieldMask.GetPaths() {
  1054  		if !removedSelectors[int(path.Selector())] {
  1055  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
  1056  				if tp, ok := path.(*ProvisioningPolicySpecTemplate_FieldTerminalPath); ok {
  1057  					switch tp.selector {
  1058  					case ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:
  1059  						mySubMasks[ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask()
  1060  					case ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:
  1061  						mySubMasks[ProvisioningPolicySpecTemplate_FieldPathSelectorSpec] = device.FullDevice_Spec_FieldMask()
  1062  					case ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec:
  1063  						mySubMasks[ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec] = device.FullDevice_PublicListingSpec_FieldMask()
  1064  					}
  1065  				} else if tp, ok := path.(*ProvisioningPolicySpecTemplate_FieldSubPath); ok {
  1066  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
  1067  				}
  1068  			} else {
  1069  				result.Paths = append(result.Paths, path)
  1070  			}
  1071  		}
  1072  	}
  1073  	for selector, mySubMask := range mySubMasks {
  1074  		if mySubMask.PathsCount() > 0 {
  1075  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
  1076  				result.Paths = append(result.Paths, &ProvisioningPolicySpecTemplate_FieldSubPath{selector: selector, subPath: allowedPath})
  1077  			}
  1078  		}
  1079  	}
  1080  
  1081  	if len(result.Paths) == 0 {
  1082  		return nil
  1083  	}
  1084  	return result
  1085  }
  1086  
  1087  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
  1088  	return fieldMask.Subtract(other.(*ProvisioningPolicy_Spec_Template_FieldMask))
  1089  }
  1090  
  1091  // FilterInputFields generates copy of field paths with output_only field paths removed
  1092  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) FilterInputFields() *ProvisioningPolicy_Spec_Template_FieldMask {
  1093  	result := &ProvisioningPolicy_Spec_Template_FieldMask{}
  1094  	for _, path := range fieldMask.Paths {
  1095  		switch path.Selector() {
  1096  		case ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:
  1097  			if _, ok := path.(*ProvisioningPolicySpecTemplate_FieldTerminalPath); ok {
  1098  				for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths {
  1099  					result.Paths = append(result.Paths, &ProvisioningPolicySpecTemplate_FieldSubPath{selector: path.Selector(), subPath: subpath})
  1100  				}
  1101  			} else if sub, ok := path.(*ProvisioningPolicySpecTemplate_FieldSubPath); ok {
  1102  				selectedMask := &meta.Meta_FieldMask{
  1103  					Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)},
  1104  				}
  1105  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
  1106  					result.Paths = append(result.Paths, &ProvisioningPolicySpecTemplate_FieldSubPath{selector: ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata, subPath: allowedPath})
  1107  				}
  1108  			}
  1109  		case ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:
  1110  			if _, ok := path.(*ProvisioningPolicySpecTemplate_FieldTerminalPath); ok {
  1111  				for _, subpath := range device.FullDevice_Spec_FieldMask().FilterInputFields().Paths {
  1112  					result.Paths = append(result.Paths, &ProvisioningPolicySpecTemplate_FieldSubPath{selector: path.Selector(), subPath: subpath})
  1113  				}
  1114  			} else if sub, ok := path.(*ProvisioningPolicySpecTemplate_FieldSubPath); ok {
  1115  				selectedMask := &device.Device_Spec_FieldMask{
  1116  					Paths: []device.DeviceSpec_FieldPath{sub.subPath.(device.DeviceSpec_FieldPath)},
  1117  				}
  1118  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
  1119  					result.Paths = append(result.Paths, &ProvisioningPolicySpecTemplate_FieldSubPath{selector: ProvisioningPolicySpecTemplate_FieldPathSelectorSpec, subPath: allowedPath})
  1120  				}
  1121  			}
  1122  		default:
  1123  			result.Paths = append(result.Paths, path)
  1124  		}
  1125  	}
  1126  	return result
  1127  }
  1128  
  1129  // ToFieldMask is used for proto conversions
  1130  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
  1131  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1132  	for _, path := range fieldMask.Paths {
  1133  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
  1134  	}
  1135  	return protoFieldMask
  1136  }
  1137  
  1138  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
  1139  	if fieldMask == nil {
  1140  		return status.Error(codes.Internal, "target field mask is nil")
  1141  	}
  1142  	fieldMask.Paths = make([]ProvisioningPolicySpecTemplate_FieldPath, 0, len(protoFieldMask.Paths))
  1143  	for _, strPath := range protoFieldMask.Paths {
  1144  		path, err := ParseProvisioningPolicySpecTemplate_FieldPath(strPath)
  1145  		if err != nil {
  1146  			return err
  1147  		}
  1148  		fieldMask.Paths = append(fieldMask.Paths, path)
  1149  	}
  1150  	return nil
  1151  }
  1152  
  1153  // implement methods required by customType
  1154  func (fieldMask ProvisioningPolicy_Spec_Template_FieldMask) Marshal() ([]byte, error) {
  1155  	protoFieldMask := fieldMask.ToProtoFieldMask()
  1156  	return proto.Marshal(protoFieldMask)
  1157  }
  1158  
  1159  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Unmarshal(data []byte) error {
  1160  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1161  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
  1162  		return err
  1163  	}
  1164  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1165  		return err
  1166  	}
  1167  	return nil
  1168  }
  1169  
  1170  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Size() int {
  1171  	return proto.Size(fieldMask.ToProtoFieldMask())
  1172  }
  1173  
  1174  func (fieldMask ProvisioningPolicy_Spec_Template_FieldMask) MarshalJSON() ([]byte, error) {
  1175  	return json.Marshal(fieldMask.ToProtoFieldMask())
  1176  }
  1177  
  1178  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) UnmarshalJSON(data []byte) error {
  1179  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1180  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
  1181  		return err
  1182  	}
  1183  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1184  		return err
  1185  	}
  1186  	return nil
  1187  }
  1188  
  1189  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) AppendPath(path ProvisioningPolicySpecTemplate_FieldPath) {
  1190  	fieldMask.Paths = append(fieldMask.Paths, path)
  1191  }
  1192  
  1193  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
  1194  	fieldMask.Paths = append(fieldMask.Paths, path.(ProvisioningPolicySpecTemplate_FieldPath))
  1195  }
  1196  
  1197  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) GetPaths() []ProvisioningPolicySpecTemplate_FieldPath {
  1198  	if fieldMask == nil {
  1199  		return nil
  1200  	}
  1201  	return fieldMask.Paths
  1202  }
  1203  
  1204  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) GetRawPaths() []gotenobject.FieldPath {
  1205  	if fieldMask == nil {
  1206  		return nil
  1207  	}
  1208  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
  1209  	for _, path := range fieldMask.Paths {
  1210  		rawPaths = append(rawPaths, path)
  1211  	}
  1212  	return rawPaths
  1213  }
  1214  
  1215  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) SetFromCliFlag(raw string) error {
  1216  	path, err := ParseProvisioningPolicySpecTemplate_FieldPath(raw)
  1217  	if err != nil {
  1218  		return err
  1219  	}
  1220  	fieldMask.Paths = append(fieldMask.Paths, path)
  1221  	return nil
  1222  }
  1223  
  1224  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Set(target, source *ProvisioningPolicy_Spec_Template) {
  1225  	for _, path := range fieldMask.Paths {
  1226  		val, _ := path.GetSingle(source)
  1227  		// if val is nil, then field does not exist in source, skip
  1228  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
  1229  		if val != nil {
  1230  			path.WithIValue(val).SetTo(&target)
  1231  		}
  1232  	}
  1233  }
  1234  
  1235  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
  1236  	fieldMask.Set(target.(*ProvisioningPolicy_Spec_Template), source.(*ProvisioningPolicy_Spec_Template))
  1237  }
  1238  
  1239  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) Project(source *ProvisioningPolicy_Spec_Template) *ProvisioningPolicy_Spec_Template {
  1240  	if source == nil {
  1241  		return nil
  1242  	}
  1243  	if fieldMask == nil {
  1244  		return source
  1245  	}
  1246  	result := &ProvisioningPolicy_Spec_Template{}
  1247  	metadataMask := &meta.Meta_FieldMask{}
  1248  	wholeMetadataAccepted := false
  1249  	specMask := &device.Device_Spec_FieldMask{}
  1250  	wholeSpecAccepted := false
  1251  	publicListingSpecMask := &device.Device_PublicListingSpec_FieldMask{}
  1252  	wholePublicListingSpecAccepted := false
  1253  
  1254  	for _, p := range fieldMask.Paths {
  1255  		switch tp := p.(type) {
  1256  		case *ProvisioningPolicySpecTemplate_FieldTerminalPath:
  1257  			switch tp.selector {
  1258  			case ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:
  1259  				result.Metadata = source.Metadata
  1260  				wholeMetadataAccepted = true
  1261  			case ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:
  1262  				result.Spec = source.Spec
  1263  				wholeSpecAccepted = true
  1264  			case ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec:
  1265  				result.PublicListingSpec = source.PublicListingSpec
  1266  				wholePublicListingSpecAccepted = true
  1267  			}
  1268  		case *ProvisioningPolicySpecTemplate_FieldSubPath:
  1269  			switch tp.selector {
  1270  			case ProvisioningPolicySpecTemplate_FieldPathSelectorMetadata:
  1271  				metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath))
  1272  			case ProvisioningPolicySpecTemplate_FieldPathSelectorSpec:
  1273  				specMask.AppendPath(tp.subPath.(device.DeviceSpec_FieldPath))
  1274  			case ProvisioningPolicySpecTemplate_FieldPathSelectorPublicListingSpec:
  1275  				publicListingSpecMask.AppendPath(tp.subPath.(device.DevicePublicListingSpec_FieldPath))
  1276  			}
  1277  		}
  1278  	}
  1279  	if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 {
  1280  		result.Metadata = metadataMask.Project(source.GetMetadata())
  1281  	}
  1282  	if wholeSpecAccepted == false && len(specMask.Paths) > 0 {
  1283  		result.Spec = specMask.Project(source.GetSpec())
  1284  	}
  1285  	if wholePublicListingSpecAccepted == false && len(publicListingSpecMask.Paths) > 0 {
  1286  		result.PublicListingSpec = publicListingSpecMask.Project(source.GetPublicListingSpec())
  1287  	}
  1288  	return result
  1289  }
  1290  
  1291  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
  1292  	return fieldMask.Project(source.(*ProvisioningPolicy_Spec_Template))
  1293  }
  1294  
  1295  func (fieldMask *ProvisioningPolicy_Spec_Template_FieldMask) PathsCount() int {
  1296  	if fieldMask == nil {
  1297  		return 0
  1298  	}
  1299  	return len(fieldMask.Paths)
  1300  }