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

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