github.com/cloudwan/edgelq-sdk@v1.15.4/monitoring/resources/v3/metric_descriptor/metric_descriptor.pb.fieldmask.go (about)

     1  // Code generated by protoc-gen-goten-object
     2  // File: edgelq/monitoring/proto/v3/metric_descriptor.proto
     3  // DO NOT EDIT!!!
     4  
     5  package metric_descriptor
     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  	api "github.com/cloudwan/edgelq-sdk/common/api"
    23  	common "github.com/cloudwan/edgelq-sdk/monitoring/resources/v3/common"
    24  	monitored_resource_descriptor "github.com/cloudwan/edgelq-sdk/monitoring/resources/v3/monitored_resource_descriptor"
    25  	project "github.com/cloudwan/edgelq-sdk/monitoring/resources/v3/project"
    26  	meta "github.com/cloudwan/goten-sdk/types/meta"
    27  )
    28  
    29  // ensure the imports are used
    30  var (
    31  	_ = new(json.Marshaler)
    32  	_ = strings.Builder{}
    33  
    34  	_ = codes.NotFound
    35  	_ = status.Status{}
    36  	_ = new(proto.Message)
    37  	_ = new(preflect.Message)
    38  	_ = googlefieldmaskpb.FieldMask{}
    39  
    40  	_ = new(gotenobject.FieldMask)
    41  )
    42  
    43  // make sure we're using proto imports
    44  var (
    45  	_ = api.LaunchStage(0)
    46  	_ = &common.LabelDescriptor{}
    47  	_ = &monitored_resource_descriptor.MonitoredResourceDescriptor{}
    48  	_ = &project.Project{}
    49  	_ = &meta.Meta{}
    50  )
    51  
    52  type MetricDescriptor_FieldMask struct {
    53  	Paths []MetricDescriptor_FieldPath
    54  }
    55  
    56  func FullMetricDescriptor_FieldMask() *MetricDescriptor_FieldMask {
    57  	res := &MetricDescriptor_FieldMask{}
    58  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorMetadata})
    59  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorName})
    60  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorType})
    61  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorResourceTypes})
    62  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorLabels})
    63  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorMetricKind})
    64  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorValueType})
    65  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorUnit})
    66  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorDescription})
    67  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorDisplayName})
    68  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata})
    69  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorDistributionBucketOptions})
    70  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorPromotedLabelKeySets})
    71  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorIndexSpec})
    72  	res.Paths = append(res.Paths, &MetricDescriptor_FieldTerminalPath{selector: MetricDescriptor_FieldPathSelectorStorageConfig})
    73  	return res
    74  }
    75  
    76  func (fieldMask *MetricDescriptor_FieldMask) String() string {
    77  	if fieldMask == nil {
    78  		return "<nil>"
    79  	}
    80  	pathsStr := make([]string, 0, len(fieldMask.Paths))
    81  	for _, path := range fieldMask.Paths {
    82  		pathsStr = append(pathsStr, path.String())
    83  	}
    84  	return strings.Join(pathsStr, ", ")
    85  }
    86  
    87  func (fieldMask *MetricDescriptor_FieldMask) IsFull() bool {
    88  	if fieldMask == nil {
    89  		return false
    90  	}
    91  	presentSelectors := make([]bool, 15)
    92  	for _, path := range fieldMask.Paths {
    93  		if asFinal, ok := path.(*MetricDescriptor_FieldTerminalPath); ok {
    94  			presentSelectors[int(asFinal.selector)] = true
    95  		}
    96  	}
    97  	for _, flag := range presentSelectors {
    98  		if !flag {
    99  			return false
   100  		}
   101  	}
   102  	return true
   103  }
   104  
   105  func (fieldMask *MetricDescriptor_FieldMask) ProtoReflect() preflect.Message {
   106  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   107  		return ParseMetricDescriptor_FieldPath(raw)
   108  	})
   109  }
   110  
   111  func (fieldMask *MetricDescriptor_FieldMask) ProtoMessage() {}
   112  
   113  func (fieldMask *MetricDescriptor_FieldMask) Reset() {
   114  	if fieldMask != nil {
   115  		fieldMask.Paths = nil
   116  	}
   117  }
   118  
   119  func (fieldMask *MetricDescriptor_FieldMask) Subtract(other *MetricDescriptor_FieldMask) *MetricDescriptor_FieldMask {
   120  	result := &MetricDescriptor_FieldMask{}
   121  	removedSelectors := make([]bool, 15)
   122  	otherSubMasks := map[MetricDescriptor_FieldPathSelector]gotenobject.FieldMask{
   123  		MetricDescriptor_FieldPathSelectorMetadata:                  &meta.Meta_FieldMask{},
   124  		MetricDescriptor_FieldPathSelectorLabels:                    &common.LabelDescriptor_FieldMask{},
   125  		MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata:  &MetricDescriptor_MetricDescriptorMetadata_FieldMask{},
   126  		MetricDescriptor_FieldPathSelectorDistributionBucketOptions: &common.Distribution_BucketOptions_FieldMask{},
   127  		MetricDescriptor_FieldPathSelectorPromotedLabelKeySets:      &common.LabelKeySet_FieldMask{},
   128  		MetricDescriptor_FieldPathSelectorIndexSpec:                 &MetricDescriptor_IndexSpec_FieldMask{},
   129  		MetricDescriptor_FieldPathSelectorStorageConfig:             &MetricDescriptor_StorageConfig_FieldMask{},
   130  	}
   131  	mySubMasks := map[MetricDescriptor_FieldPathSelector]gotenobject.FieldMask{
   132  		MetricDescriptor_FieldPathSelectorMetadata:                  &meta.Meta_FieldMask{},
   133  		MetricDescriptor_FieldPathSelectorLabels:                    &common.LabelDescriptor_FieldMask{},
   134  		MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata:  &MetricDescriptor_MetricDescriptorMetadata_FieldMask{},
   135  		MetricDescriptor_FieldPathSelectorDistributionBucketOptions: &common.Distribution_BucketOptions_FieldMask{},
   136  		MetricDescriptor_FieldPathSelectorPromotedLabelKeySets:      &common.LabelKeySet_FieldMask{},
   137  		MetricDescriptor_FieldPathSelectorIndexSpec:                 &MetricDescriptor_IndexSpec_FieldMask{},
   138  		MetricDescriptor_FieldPathSelectorStorageConfig:             &MetricDescriptor_StorageConfig_FieldMask{},
   139  	}
   140  
   141  	for _, path := range other.GetPaths() {
   142  		switch tp := path.(type) {
   143  		case *MetricDescriptor_FieldTerminalPath:
   144  			removedSelectors[int(tp.selector)] = true
   145  		case *MetricDescriptor_FieldSubPath:
   146  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   147  		}
   148  	}
   149  	for _, path := range fieldMask.GetPaths() {
   150  		if !removedSelectors[int(path.Selector())] {
   151  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   152  				if tp, ok := path.(*MetricDescriptor_FieldTerminalPath); ok {
   153  					switch tp.selector {
   154  					case MetricDescriptor_FieldPathSelectorMetadata:
   155  						mySubMasks[MetricDescriptor_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask()
   156  					case MetricDescriptor_FieldPathSelectorLabels:
   157  						mySubMasks[MetricDescriptor_FieldPathSelectorLabels] = common.FullLabelDescriptor_FieldMask()
   158  					case MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata:
   159  						mySubMasks[MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata] = FullMetricDescriptor_MetricDescriptorMetadata_FieldMask()
   160  					case MetricDescriptor_FieldPathSelectorDistributionBucketOptions:
   161  						mySubMasks[MetricDescriptor_FieldPathSelectorDistributionBucketOptions] = common.FullDistribution_BucketOptions_FieldMask()
   162  					case MetricDescriptor_FieldPathSelectorPromotedLabelKeySets:
   163  						mySubMasks[MetricDescriptor_FieldPathSelectorPromotedLabelKeySets] = common.FullLabelKeySet_FieldMask()
   164  					case MetricDescriptor_FieldPathSelectorIndexSpec:
   165  						mySubMasks[MetricDescriptor_FieldPathSelectorIndexSpec] = FullMetricDescriptor_IndexSpec_FieldMask()
   166  					case MetricDescriptor_FieldPathSelectorStorageConfig:
   167  						mySubMasks[MetricDescriptor_FieldPathSelectorStorageConfig] = FullMetricDescriptor_StorageConfig_FieldMask()
   168  					}
   169  				} else if tp, ok := path.(*MetricDescriptor_FieldSubPath); ok {
   170  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   171  				}
   172  			} else {
   173  				result.Paths = append(result.Paths, path)
   174  			}
   175  		}
   176  	}
   177  	for selector, mySubMask := range mySubMasks {
   178  		if mySubMask.PathsCount() > 0 {
   179  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   180  				result.Paths = append(result.Paths, &MetricDescriptor_FieldSubPath{selector: selector, subPath: allowedPath})
   181  			}
   182  		}
   183  	}
   184  
   185  	if len(result.Paths) == 0 {
   186  		return nil
   187  	}
   188  	return result
   189  }
   190  
   191  func (fieldMask *MetricDescriptor_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   192  	return fieldMask.Subtract(other.(*MetricDescriptor_FieldMask))
   193  }
   194  
   195  // FilterInputFields generates copy of field paths with output_only field paths removed
   196  func (fieldMask *MetricDescriptor_FieldMask) FilterInputFields() *MetricDescriptor_FieldMask {
   197  	result := &MetricDescriptor_FieldMask{}
   198  	for _, path := range fieldMask.Paths {
   199  		switch path.Selector() {
   200  		case MetricDescriptor_FieldPathSelectorMetadata:
   201  			if _, ok := path.(*MetricDescriptor_FieldTerminalPath); ok {
   202  				for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths {
   203  					result.Paths = append(result.Paths, &MetricDescriptor_FieldSubPath{selector: path.Selector(), subPath: subpath})
   204  				}
   205  			} else if sub, ok := path.(*MetricDescriptor_FieldSubPath); ok {
   206  				selectedMask := &meta.Meta_FieldMask{
   207  					Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)},
   208  				}
   209  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   210  					result.Paths = append(result.Paths, &MetricDescriptor_FieldSubPath{selector: MetricDescriptor_FieldPathSelectorMetadata, subPath: allowedPath})
   211  				}
   212  			}
   213  		default:
   214  			result.Paths = append(result.Paths, path)
   215  		}
   216  	}
   217  	return result
   218  }
   219  
   220  // ToFieldMask is used for proto conversions
   221  func (fieldMask *MetricDescriptor_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   222  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   223  	for _, path := range fieldMask.Paths {
   224  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   225  	}
   226  	return protoFieldMask
   227  }
   228  
   229  func (fieldMask *MetricDescriptor_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   230  	if fieldMask == nil {
   231  		return status.Error(codes.Internal, "target field mask is nil")
   232  	}
   233  	fieldMask.Paths = make([]MetricDescriptor_FieldPath, 0, len(protoFieldMask.Paths))
   234  	for _, strPath := range protoFieldMask.Paths {
   235  		path, err := ParseMetricDescriptor_FieldPath(strPath)
   236  		if err != nil {
   237  			return err
   238  		}
   239  		fieldMask.Paths = append(fieldMask.Paths, path)
   240  	}
   241  	return nil
   242  }
   243  
   244  // implement methods required by customType
   245  func (fieldMask MetricDescriptor_FieldMask) Marshal() ([]byte, error) {
   246  	protoFieldMask := fieldMask.ToProtoFieldMask()
   247  	return proto.Marshal(protoFieldMask)
   248  }
   249  
   250  func (fieldMask *MetricDescriptor_FieldMask) Unmarshal(data []byte) error {
   251  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   252  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   253  		return err
   254  	}
   255  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   256  		return err
   257  	}
   258  	return nil
   259  }
   260  
   261  func (fieldMask *MetricDescriptor_FieldMask) Size() int {
   262  	return proto.Size(fieldMask.ToProtoFieldMask())
   263  }
   264  
   265  func (fieldMask MetricDescriptor_FieldMask) MarshalJSON() ([]byte, error) {
   266  	return json.Marshal(fieldMask.ToProtoFieldMask())
   267  }
   268  
   269  func (fieldMask *MetricDescriptor_FieldMask) UnmarshalJSON(data []byte) error {
   270  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   271  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   272  		return err
   273  	}
   274  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   275  		return err
   276  	}
   277  	return nil
   278  }
   279  
   280  func (fieldMask *MetricDescriptor_FieldMask) AppendPath(path MetricDescriptor_FieldPath) {
   281  	fieldMask.Paths = append(fieldMask.Paths, path)
   282  }
   283  
   284  func (fieldMask *MetricDescriptor_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   285  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptor_FieldPath))
   286  }
   287  
   288  func (fieldMask *MetricDescriptor_FieldMask) GetPaths() []MetricDescriptor_FieldPath {
   289  	if fieldMask == nil {
   290  		return nil
   291  	}
   292  	return fieldMask.Paths
   293  }
   294  
   295  func (fieldMask *MetricDescriptor_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   296  	if fieldMask == nil {
   297  		return nil
   298  	}
   299  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   300  	for _, path := range fieldMask.Paths {
   301  		rawPaths = append(rawPaths, path)
   302  	}
   303  	return rawPaths
   304  }
   305  
   306  func (fieldMask *MetricDescriptor_FieldMask) SetFromCliFlag(raw string) error {
   307  	path, err := ParseMetricDescriptor_FieldPath(raw)
   308  	if err != nil {
   309  		return err
   310  	}
   311  	fieldMask.Paths = append(fieldMask.Paths, path)
   312  	return nil
   313  }
   314  
   315  func (fieldMask *MetricDescriptor_FieldMask) Set(target, source *MetricDescriptor) {
   316  	for _, path := range fieldMask.Paths {
   317  		val, _ := path.GetSingle(source)
   318  		// if val is nil, then field does not exist in source, skip
   319  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   320  		if val != nil {
   321  			path.WithIValue(val).SetTo(&target)
   322  		}
   323  	}
   324  }
   325  
   326  func (fieldMask *MetricDescriptor_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   327  	fieldMask.Set(target.(*MetricDescriptor), source.(*MetricDescriptor))
   328  }
   329  
   330  func (fieldMask *MetricDescriptor_FieldMask) Project(source *MetricDescriptor) *MetricDescriptor {
   331  	if source == nil {
   332  		return nil
   333  	}
   334  	if fieldMask == nil {
   335  		return source
   336  	}
   337  	result := &MetricDescriptor{}
   338  	metadataMask := &meta.Meta_FieldMask{}
   339  	wholeMetadataAccepted := false
   340  	labelsMask := &common.LabelDescriptor_FieldMask{}
   341  	wholeLabelsAccepted := false
   342  	metricDescriptorMetadataMask := &MetricDescriptor_MetricDescriptorMetadata_FieldMask{}
   343  	wholeMetricDescriptorMetadataAccepted := false
   344  	distributionBucketOptionsMask := &common.Distribution_BucketOptions_FieldMask{}
   345  	wholeDistributionBucketOptionsAccepted := false
   346  	promotedLabelKeySetsMask := &common.LabelKeySet_FieldMask{}
   347  	wholePromotedLabelKeySetsAccepted := false
   348  	indexSpecMask := &MetricDescriptor_IndexSpec_FieldMask{}
   349  	wholeIndexSpecAccepted := false
   350  	storageConfigMask := &MetricDescriptor_StorageConfig_FieldMask{}
   351  	wholeStorageConfigAccepted := false
   352  
   353  	for _, p := range fieldMask.Paths {
   354  		switch tp := p.(type) {
   355  		case *MetricDescriptor_FieldTerminalPath:
   356  			switch tp.selector {
   357  			case MetricDescriptor_FieldPathSelectorMetadata:
   358  				result.Metadata = source.Metadata
   359  				wholeMetadataAccepted = true
   360  			case MetricDescriptor_FieldPathSelectorName:
   361  				result.Name = source.Name
   362  			case MetricDescriptor_FieldPathSelectorType:
   363  				result.Type = source.Type
   364  			case MetricDescriptor_FieldPathSelectorResourceTypes:
   365  				result.ResourceTypes = source.ResourceTypes
   366  			case MetricDescriptor_FieldPathSelectorLabels:
   367  				result.Labels = source.Labels
   368  				wholeLabelsAccepted = true
   369  			case MetricDescriptor_FieldPathSelectorMetricKind:
   370  				result.MetricKind = source.MetricKind
   371  			case MetricDescriptor_FieldPathSelectorValueType:
   372  				result.ValueType = source.ValueType
   373  			case MetricDescriptor_FieldPathSelectorUnit:
   374  				result.Unit = source.Unit
   375  			case MetricDescriptor_FieldPathSelectorDescription:
   376  				result.Description = source.Description
   377  			case MetricDescriptor_FieldPathSelectorDisplayName:
   378  				result.DisplayName = source.DisplayName
   379  			case MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata:
   380  				result.MetricDescriptorMetadata = source.MetricDescriptorMetadata
   381  				wholeMetricDescriptorMetadataAccepted = true
   382  			case MetricDescriptor_FieldPathSelectorDistributionBucketOptions:
   383  				result.DistributionBucketOptions = source.DistributionBucketOptions
   384  				wholeDistributionBucketOptionsAccepted = true
   385  			case MetricDescriptor_FieldPathSelectorPromotedLabelKeySets:
   386  				result.PromotedLabelKeySets = source.PromotedLabelKeySets
   387  				wholePromotedLabelKeySetsAccepted = true
   388  			case MetricDescriptor_FieldPathSelectorIndexSpec:
   389  				result.IndexSpec = source.IndexSpec
   390  				wholeIndexSpecAccepted = true
   391  			case MetricDescriptor_FieldPathSelectorStorageConfig:
   392  				result.StorageConfig = source.StorageConfig
   393  				wholeStorageConfigAccepted = true
   394  			}
   395  		case *MetricDescriptor_FieldSubPath:
   396  			switch tp.selector {
   397  			case MetricDescriptor_FieldPathSelectorMetadata:
   398  				metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath))
   399  			case MetricDescriptor_FieldPathSelectorLabels:
   400  				labelsMask.AppendPath(tp.subPath.(common.LabelDescriptor_FieldPath))
   401  			case MetricDescriptor_FieldPathSelectorMetricDescriptorMetadata:
   402  				metricDescriptorMetadataMask.AppendPath(tp.subPath.(MetricDescriptorMetricDescriptorMetadata_FieldPath))
   403  			case MetricDescriptor_FieldPathSelectorDistributionBucketOptions:
   404  				distributionBucketOptionsMask.AppendPath(tp.subPath.(common.DistributionBucketOptions_FieldPath))
   405  			case MetricDescriptor_FieldPathSelectorPromotedLabelKeySets:
   406  				promotedLabelKeySetsMask.AppendPath(tp.subPath.(common.LabelKeySet_FieldPath))
   407  			case MetricDescriptor_FieldPathSelectorIndexSpec:
   408  				indexSpecMask.AppendPath(tp.subPath.(MetricDescriptorIndexSpec_FieldPath))
   409  			case MetricDescriptor_FieldPathSelectorStorageConfig:
   410  				storageConfigMask.AppendPath(tp.subPath.(MetricDescriptorStorageConfig_FieldPath))
   411  			}
   412  		}
   413  	}
   414  	if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 {
   415  		result.Metadata = metadataMask.Project(source.GetMetadata())
   416  	}
   417  	if wholeLabelsAccepted == false && len(labelsMask.Paths) > 0 {
   418  		for _, sourceItem := range source.GetLabels() {
   419  			result.Labels = append(result.Labels, labelsMask.Project(sourceItem))
   420  		}
   421  	}
   422  	if wholeMetricDescriptorMetadataAccepted == false && len(metricDescriptorMetadataMask.Paths) > 0 {
   423  		result.MetricDescriptorMetadata = metricDescriptorMetadataMask.Project(source.GetMetricDescriptorMetadata())
   424  	}
   425  	if wholeDistributionBucketOptionsAccepted == false && len(distributionBucketOptionsMask.Paths) > 0 {
   426  		result.DistributionBucketOptions = distributionBucketOptionsMask.Project(source.GetDistributionBucketOptions())
   427  	}
   428  	if wholePromotedLabelKeySetsAccepted == false && len(promotedLabelKeySetsMask.Paths) > 0 {
   429  		for _, sourceItem := range source.GetPromotedLabelKeySets() {
   430  			result.PromotedLabelKeySets = append(result.PromotedLabelKeySets, promotedLabelKeySetsMask.Project(sourceItem))
   431  		}
   432  	}
   433  	if wholeIndexSpecAccepted == false && len(indexSpecMask.Paths) > 0 {
   434  		result.IndexSpec = indexSpecMask.Project(source.GetIndexSpec())
   435  	}
   436  	if wholeStorageConfigAccepted == false && len(storageConfigMask.Paths) > 0 {
   437  		result.StorageConfig = storageConfigMask.Project(source.GetStorageConfig())
   438  	}
   439  	return result
   440  }
   441  
   442  func (fieldMask *MetricDescriptor_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   443  	return fieldMask.Project(source.(*MetricDescriptor))
   444  }
   445  
   446  func (fieldMask *MetricDescriptor_FieldMask) PathsCount() int {
   447  	if fieldMask == nil {
   448  		return 0
   449  	}
   450  	return len(fieldMask.Paths)
   451  }
   452  
   453  type MetricDescriptor_MetricDescriptorMetadata_FieldMask struct {
   454  	Paths []MetricDescriptorMetricDescriptorMetadata_FieldPath
   455  }
   456  
   457  func FullMetricDescriptor_MetricDescriptorMetadata_FieldMask() *MetricDescriptor_MetricDescriptorMetadata_FieldMask {
   458  	res := &MetricDescriptor_MetricDescriptorMetadata_FieldMask{}
   459  	res.Paths = append(res.Paths, &MetricDescriptorMetricDescriptorMetadata_FieldTerminalPath{selector: MetricDescriptorMetricDescriptorMetadata_FieldPathSelectorLaunchStage})
   460  	return res
   461  }
   462  
   463  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) String() string {
   464  	if fieldMask == nil {
   465  		return "<nil>"
   466  	}
   467  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   468  	for _, path := range fieldMask.Paths {
   469  		pathsStr = append(pathsStr, path.String())
   470  	}
   471  	return strings.Join(pathsStr, ", ")
   472  }
   473  
   474  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) IsFull() bool {
   475  	if fieldMask == nil {
   476  		return false
   477  	}
   478  	presentSelectors := make([]bool, 1)
   479  	for _, path := range fieldMask.Paths {
   480  		if asFinal, ok := path.(*MetricDescriptorMetricDescriptorMetadata_FieldTerminalPath); ok {
   481  			presentSelectors[int(asFinal.selector)] = true
   482  		}
   483  	}
   484  	for _, flag := range presentSelectors {
   485  		if !flag {
   486  			return false
   487  		}
   488  	}
   489  	return true
   490  }
   491  
   492  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) ProtoReflect() preflect.Message {
   493  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   494  		return ParseMetricDescriptorMetricDescriptorMetadata_FieldPath(raw)
   495  	})
   496  }
   497  
   498  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) ProtoMessage() {}
   499  
   500  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Reset() {
   501  	if fieldMask != nil {
   502  		fieldMask.Paths = nil
   503  	}
   504  }
   505  
   506  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Subtract(other *MetricDescriptor_MetricDescriptorMetadata_FieldMask) *MetricDescriptor_MetricDescriptorMetadata_FieldMask {
   507  	result := &MetricDescriptor_MetricDescriptorMetadata_FieldMask{}
   508  	removedSelectors := make([]bool, 1)
   509  
   510  	for _, path := range other.GetPaths() {
   511  		switch tp := path.(type) {
   512  		case *MetricDescriptorMetricDescriptorMetadata_FieldTerminalPath:
   513  			removedSelectors[int(tp.selector)] = true
   514  		}
   515  	}
   516  	for _, path := range fieldMask.GetPaths() {
   517  		if !removedSelectors[int(path.Selector())] {
   518  			result.Paths = append(result.Paths, path)
   519  		}
   520  	}
   521  
   522  	if len(result.Paths) == 0 {
   523  		return nil
   524  	}
   525  	return result
   526  }
   527  
   528  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   529  	return fieldMask.Subtract(other.(*MetricDescriptor_MetricDescriptorMetadata_FieldMask))
   530  }
   531  
   532  // FilterInputFields generates copy of field paths with output_only field paths removed
   533  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) FilterInputFields() *MetricDescriptor_MetricDescriptorMetadata_FieldMask {
   534  	result := &MetricDescriptor_MetricDescriptorMetadata_FieldMask{}
   535  	result.Paths = append(result.Paths, fieldMask.Paths...)
   536  	return result
   537  }
   538  
   539  // ToFieldMask is used for proto conversions
   540  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   541  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   542  	for _, path := range fieldMask.Paths {
   543  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   544  	}
   545  	return protoFieldMask
   546  }
   547  
   548  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   549  	if fieldMask == nil {
   550  		return status.Error(codes.Internal, "target field mask is nil")
   551  	}
   552  	fieldMask.Paths = make([]MetricDescriptorMetricDescriptorMetadata_FieldPath, 0, len(protoFieldMask.Paths))
   553  	for _, strPath := range protoFieldMask.Paths {
   554  		path, err := ParseMetricDescriptorMetricDescriptorMetadata_FieldPath(strPath)
   555  		if err != nil {
   556  			return err
   557  		}
   558  		fieldMask.Paths = append(fieldMask.Paths, path)
   559  	}
   560  	return nil
   561  }
   562  
   563  // implement methods required by customType
   564  func (fieldMask MetricDescriptor_MetricDescriptorMetadata_FieldMask) Marshal() ([]byte, error) {
   565  	protoFieldMask := fieldMask.ToProtoFieldMask()
   566  	return proto.Marshal(protoFieldMask)
   567  }
   568  
   569  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Unmarshal(data []byte) error {
   570  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   571  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   572  		return err
   573  	}
   574  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   575  		return err
   576  	}
   577  	return nil
   578  }
   579  
   580  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Size() int {
   581  	return proto.Size(fieldMask.ToProtoFieldMask())
   582  }
   583  
   584  func (fieldMask MetricDescriptor_MetricDescriptorMetadata_FieldMask) MarshalJSON() ([]byte, error) {
   585  	return json.Marshal(fieldMask.ToProtoFieldMask())
   586  }
   587  
   588  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) UnmarshalJSON(data []byte) error {
   589  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   590  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   591  		return err
   592  	}
   593  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   594  		return err
   595  	}
   596  	return nil
   597  }
   598  
   599  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) AppendPath(path MetricDescriptorMetricDescriptorMetadata_FieldPath) {
   600  	fieldMask.Paths = append(fieldMask.Paths, path)
   601  }
   602  
   603  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   604  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptorMetricDescriptorMetadata_FieldPath))
   605  }
   606  
   607  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) GetPaths() []MetricDescriptorMetricDescriptorMetadata_FieldPath {
   608  	if fieldMask == nil {
   609  		return nil
   610  	}
   611  	return fieldMask.Paths
   612  }
   613  
   614  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   615  	if fieldMask == nil {
   616  		return nil
   617  	}
   618  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   619  	for _, path := range fieldMask.Paths {
   620  		rawPaths = append(rawPaths, path)
   621  	}
   622  	return rawPaths
   623  }
   624  
   625  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) SetFromCliFlag(raw string) error {
   626  	path, err := ParseMetricDescriptorMetricDescriptorMetadata_FieldPath(raw)
   627  	if err != nil {
   628  		return err
   629  	}
   630  	fieldMask.Paths = append(fieldMask.Paths, path)
   631  	return nil
   632  }
   633  
   634  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Set(target, source *MetricDescriptor_MetricDescriptorMetadata) {
   635  	for _, path := range fieldMask.Paths {
   636  		val, _ := path.GetSingle(source)
   637  		// if val is nil, then field does not exist in source, skip
   638  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   639  		if val != nil {
   640  			path.WithIValue(val).SetTo(&target)
   641  		}
   642  	}
   643  }
   644  
   645  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   646  	fieldMask.Set(target.(*MetricDescriptor_MetricDescriptorMetadata), source.(*MetricDescriptor_MetricDescriptorMetadata))
   647  }
   648  
   649  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) Project(source *MetricDescriptor_MetricDescriptorMetadata) *MetricDescriptor_MetricDescriptorMetadata {
   650  	if source == nil {
   651  		return nil
   652  	}
   653  	if fieldMask == nil {
   654  		return source
   655  	}
   656  	result := &MetricDescriptor_MetricDescriptorMetadata{}
   657  
   658  	for _, p := range fieldMask.Paths {
   659  		switch tp := p.(type) {
   660  		case *MetricDescriptorMetricDescriptorMetadata_FieldTerminalPath:
   661  			switch tp.selector {
   662  			case MetricDescriptorMetricDescriptorMetadata_FieldPathSelectorLaunchStage:
   663  				result.LaunchStage = source.LaunchStage
   664  			}
   665  		}
   666  	}
   667  	return result
   668  }
   669  
   670  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   671  	return fieldMask.Project(source.(*MetricDescriptor_MetricDescriptorMetadata))
   672  }
   673  
   674  func (fieldMask *MetricDescriptor_MetricDescriptorMetadata_FieldMask) PathsCount() int {
   675  	if fieldMask == nil {
   676  		return 0
   677  	}
   678  	return len(fieldMask.Paths)
   679  }
   680  
   681  type MetricDescriptor_IndexSpec_FieldMask struct {
   682  	Paths []MetricDescriptorIndexSpec_FieldPath
   683  }
   684  
   685  func FullMetricDescriptor_IndexSpec_FieldMask() *MetricDescriptor_IndexSpec_FieldMask {
   686  	res := &MetricDescriptor_IndexSpec_FieldMask{}
   687  	res.Paths = append(res.Paths, &MetricDescriptorIndexSpec_FieldTerminalPath{selector: MetricDescriptorIndexSpec_FieldPathSelectorPerResource})
   688  	return res
   689  }
   690  
   691  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) String() string {
   692  	if fieldMask == nil {
   693  		return "<nil>"
   694  	}
   695  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   696  	for _, path := range fieldMask.Paths {
   697  		pathsStr = append(pathsStr, path.String())
   698  	}
   699  	return strings.Join(pathsStr, ", ")
   700  }
   701  
   702  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) IsFull() bool {
   703  	if fieldMask == nil {
   704  		return false
   705  	}
   706  	presentSelectors := make([]bool, 1)
   707  	for _, path := range fieldMask.Paths {
   708  		if asFinal, ok := path.(*MetricDescriptorIndexSpec_FieldTerminalPath); ok {
   709  			presentSelectors[int(asFinal.selector)] = true
   710  		}
   711  	}
   712  	for _, flag := range presentSelectors {
   713  		if !flag {
   714  			return false
   715  		}
   716  	}
   717  	return true
   718  }
   719  
   720  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) ProtoReflect() preflect.Message {
   721  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   722  		return ParseMetricDescriptorIndexSpec_FieldPath(raw)
   723  	})
   724  }
   725  
   726  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) ProtoMessage() {}
   727  
   728  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Reset() {
   729  	if fieldMask != nil {
   730  		fieldMask.Paths = nil
   731  	}
   732  }
   733  
   734  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Subtract(other *MetricDescriptor_IndexSpec_FieldMask) *MetricDescriptor_IndexSpec_FieldMask {
   735  	result := &MetricDescriptor_IndexSpec_FieldMask{}
   736  	removedSelectors := make([]bool, 1)
   737  	otherSubMasks := map[MetricDescriptorIndexSpec_FieldPathSelector]gotenobject.FieldMask{
   738  		MetricDescriptorIndexSpec_FieldPathSelectorPerResource: &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{},
   739  	}
   740  	mySubMasks := map[MetricDescriptorIndexSpec_FieldPathSelector]gotenobject.FieldMask{
   741  		MetricDescriptorIndexSpec_FieldPathSelectorPerResource: &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{},
   742  	}
   743  
   744  	for _, path := range other.GetPaths() {
   745  		switch tp := path.(type) {
   746  		case *MetricDescriptorIndexSpec_FieldTerminalPath:
   747  			removedSelectors[int(tp.selector)] = true
   748  		case *MetricDescriptorIndexSpec_FieldSubPath:
   749  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   750  		}
   751  	}
   752  	for _, path := range fieldMask.GetPaths() {
   753  		if !removedSelectors[int(path.Selector())] {
   754  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   755  				if tp, ok := path.(*MetricDescriptorIndexSpec_FieldTerminalPath); ok {
   756  					switch tp.selector {
   757  					case MetricDescriptorIndexSpec_FieldPathSelectorPerResource:
   758  						mySubMasks[MetricDescriptorIndexSpec_FieldPathSelectorPerResource] = FullMetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask()
   759  					}
   760  				} else if tp, ok := path.(*MetricDescriptorIndexSpec_FieldSubPath); ok {
   761  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   762  				}
   763  			} else {
   764  				result.Paths = append(result.Paths, path)
   765  			}
   766  		}
   767  	}
   768  	for selector, mySubMask := range mySubMasks {
   769  		if mySubMask.PathsCount() > 0 {
   770  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   771  				result.Paths = append(result.Paths, &MetricDescriptorIndexSpec_FieldSubPath{selector: selector, subPath: allowedPath})
   772  			}
   773  		}
   774  	}
   775  
   776  	if len(result.Paths) == 0 {
   777  		return nil
   778  	}
   779  	return result
   780  }
   781  
   782  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   783  	return fieldMask.Subtract(other.(*MetricDescriptor_IndexSpec_FieldMask))
   784  }
   785  
   786  // FilterInputFields generates copy of field paths with output_only field paths removed
   787  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) FilterInputFields() *MetricDescriptor_IndexSpec_FieldMask {
   788  	result := &MetricDescriptor_IndexSpec_FieldMask{}
   789  	result.Paths = append(result.Paths, fieldMask.Paths...)
   790  	return result
   791  }
   792  
   793  // ToFieldMask is used for proto conversions
   794  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   795  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   796  	for _, path := range fieldMask.Paths {
   797  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   798  	}
   799  	return protoFieldMask
   800  }
   801  
   802  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   803  	if fieldMask == nil {
   804  		return status.Error(codes.Internal, "target field mask is nil")
   805  	}
   806  	fieldMask.Paths = make([]MetricDescriptorIndexSpec_FieldPath, 0, len(protoFieldMask.Paths))
   807  	for _, strPath := range protoFieldMask.Paths {
   808  		path, err := ParseMetricDescriptorIndexSpec_FieldPath(strPath)
   809  		if err != nil {
   810  			return err
   811  		}
   812  		fieldMask.Paths = append(fieldMask.Paths, path)
   813  	}
   814  	return nil
   815  }
   816  
   817  // implement methods required by customType
   818  func (fieldMask MetricDescriptor_IndexSpec_FieldMask) Marshal() ([]byte, error) {
   819  	protoFieldMask := fieldMask.ToProtoFieldMask()
   820  	return proto.Marshal(protoFieldMask)
   821  }
   822  
   823  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Unmarshal(data []byte) error {
   824  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   825  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   826  		return err
   827  	}
   828  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   829  		return err
   830  	}
   831  	return nil
   832  }
   833  
   834  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Size() int {
   835  	return proto.Size(fieldMask.ToProtoFieldMask())
   836  }
   837  
   838  func (fieldMask MetricDescriptor_IndexSpec_FieldMask) MarshalJSON() ([]byte, error) {
   839  	return json.Marshal(fieldMask.ToProtoFieldMask())
   840  }
   841  
   842  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) UnmarshalJSON(data []byte) error {
   843  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   844  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   845  		return err
   846  	}
   847  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   848  		return err
   849  	}
   850  	return nil
   851  }
   852  
   853  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) AppendPath(path MetricDescriptorIndexSpec_FieldPath) {
   854  	fieldMask.Paths = append(fieldMask.Paths, path)
   855  }
   856  
   857  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   858  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptorIndexSpec_FieldPath))
   859  }
   860  
   861  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) GetPaths() []MetricDescriptorIndexSpec_FieldPath {
   862  	if fieldMask == nil {
   863  		return nil
   864  	}
   865  	return fieldMask.Paths
   866  }
   867  
   868  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   869  	if fieldMask == nil {
   870  		return nil
   871  	}
   872  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   873  	for _, path := range fieldMask.Paths {
   874  		rawPaths = append(rawPaths, path)
   875  	}
   876  	return rawPaths
   877  }
   878  
   879  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) SetFromCliFlag(raw string) error {
   880  	path, err := ParseMetricDescriptorIndexSpec_FieldPath(raw)
   881  	if err != nil {
   882  		return err
   883  	}
   884  	fieldMask.Paths = append(fieldMask.Paths, path)
   885  	return nil
   886  }
   887  
   888  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Set(target, source *MetricDescriptor_IndexSpec) {
   889  	for _, path := range fieldMask.Paths {
   890  		val, _ := path.GetSingle(source)
   891  		// if val is nil, then field does not exist in source, skip
   892  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   893  		if val != nil {
   894  			path.WithIValue(val).SetTo(&target)
   895  		}
   896  	}
   897  }
   898  
   899  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   900  	fieldMask.Set(target.(*MetricDescriptor_IndexSpec), source.(*MetricDescriptor_IndexSpec))
   901  }
   902  
   903  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) Project(source *MetricDescriptor_IndexSpec) *MetricDescriptor_IndexSpec {
   904  	if source == nil {
   905  		return nil
   906  	}
   907  	if fieldMask == nil {
   908  		return source
   909  	}
   910  	result := &MetricDescriptor_IndexSpec{}
   911  	perResourceMask := &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{}
   912  	wholePerResourceAccepted := false
   913  
   914  	for _, p := range fieldMask.Paths {
   915  		switch tp := p.(type) {
   916  		case *MetricDescriptorIndexSpec_FieldTerminalPath:
   917  			switch tp.selector {
   918  			case MetricDescriptorIndexSpec_FieldPathSelectorPerResource:
   919  				result.PerResource = source.PerResource
   920  				wholePerResourceAccepted = true
   921  			}
   922  		case *MetricDescriptorIndexSpec_FieldSubPath:
   923  			switch tp.selector {
   924  			case MetricDescriptorIndexSpec_FieldPathSelectorPerResource:
   925  				perResourceMask.AppendPath(tp.subPath.(MetricDescriptorIndexSpecPerMonitoredResource_FieldPath))
   926  			}
   927  		}
   928  	}
   929  	if wholePerResourceAccepted == false && len(perResourceMask.Paths) > 0 {
   930  		for _, sourceItem := range source.GetPerResource() {
   931  			result.PerResource = append(result.PerResource, perResourceMask.Project(sourceItem))
   932  		}
   933  	}
   934  	return result
   935  }
   936  
   937  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   938  	return fieldMask.Project(source.(*MetricDescriptor_IndexSpec))
   939  }
   940  
   941  func (fieldMask *MetricDescriptor_IndexSpec_FieldMask) PathsCount() int {
   942  	if fieldMask == nil {
   943  		return 0
   944  	}
   945  	return len(fieldMask.Paths)
   946  }
   947  
   948  type MetricDescriptor_StorageConfig_FieldMask struct {
   949  	Paths []MetricDescriptorStorageConfig_FieldPath
   950  }
   951  
   952  func FullMetricDescriptor_StorageConfig_FieldMask() *MetricDescriptor_StorageConfig_FieldMask {
   953  	res := &MetricDescriptor_StorageConfig_FieldMask{}
   954  	res.Paths = append(res.Paths, &MetricDescriptorStorageConfig_FieldTerminalPath{selector: MetricDescriptorStorageConfig_FieldPathSelectorStoreRawPoints})
   955  	return res
   956  }
   957  
   958  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) String() string {
   959  	if fieldMask == nil {
   960  		return "<nil>"
   961  	}
   962  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   963  	for _, path := range fieldMask.Paths {
   964  		pathsStr = append(pathsStr, path.String())
   965  	}
   966  	return strings.Join(pathsStr, ", ")
   967  }
   968  
   969  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) IsFull() bool {
   970  	if fieldMask == nil {
   971  		return false
   972  	}
   973  	presentSelectors := make([]bool, 1)
   974  	for _, path := range fieldMask.Paths {
   975  		if asFinal, ok := path.(*MetricDescriptorStorageConfig_FieldTerminalPath); ok {
   976  			presentSelectors[int(asFinal.selector)] = true
   977  		}
   978  	}
   979  	for _, flag := range presentSelectors {
   980  		if !flag {
   981  			return false
   982  		}
   983  	}
   984  	return true
   985  }
   986  
   987  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) ProtoReflect() preflect.Message {
   988  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   989  		return ParseMetricDescriptorStorageConfig_FieldPath(raw)
   990  	})
   991  }
   992  
   993  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) ProtoMessage() {}
   994  
   995  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Reset() {
   996  	if fieldMask != nil {
   997  		fieldMask.Paths = nil
   998  	}
   999  }
  1000  
  1001  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Subtract(other *MetricDescriptor_StorageConfig_FieldMask) *MetricDescriptor_StorageConfig_FieldMask {
  1002  	result := &MetricDescriptor_StorageConfig_FieldMask{}
  1003  	removedSelectors := make([]bool, 1)
  1004  
  1005  	for _, path := range other.GetPaths() {
  1006  		switch tp := path.(type) {
  1007  		case *MetricDescriptorStorageConfig_FieldTerminalPath:
  1008  			removedSelectors[int(tp.selector)] = true
  1009  		}
  1010  	}
  1011  	for _, path := range fieldMask.GetPaths() {
  1012  		if !removedSelectors[int(path.Selector())] {
  1013  			result.Paths = append(result.Paths, path)
  1014  		}
  1015  	}
  1016  
  1017  	if len(result.Paths) == 0 {
  1018  		return nil
  1019  	}
  1020  	return result
  1021  }
  1022  
  1023  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
  1024  	return fieldMask.Subtract(other.(*MetricDescriptor_StorageConfig_FieldMask))
  1025  }
  1026  
  1027  // FilterInputFields generates copy of field paths with output_only field paths removed
  1028  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) FilterInputFields() *MetricDescriptor_StorageConfig_FieldMask {
  1029  	result := &MetricDescriptor_StorageConfig_FieldMask{}
  1030  	result.Paths = append(result.Paths, fieldMask.Paths...)
  1031  	return result
  1032  }
  1033  
  1034  // ToFieldMask is used for proto conversions
  1035  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
  1036  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1037  	for _, path := range fieldMask.Paths {
  1038  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
  1039  	}
  1040  	return protoFieldMask
  1041  }
  1042  
  1043  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
  1044  	if fieldMask == nil {
  1045  		return status.Error(codes.Internal, "target field mask is nil")
  1046  	}
  1047  	fieldMask.Paths = make([]MetricDescriptorStorageConfig_FieldPath, 0, len(protoFieldMask.Paths))
  1048  	for _, strPath := range protoFieldMask.Paths {
  1049  		path, err := ParseMetricDescriptorStorageConfig_FieldPath(strPath)
  1050  		if err != nil {
  1051  			return err
  1052  		}
  1053  		fieldMask.Paths = append(fieldMask.Paths, path)
  1054  	}
  1055  	return nil
  1056  }
  1057  
  1058  // implement methods required by customType
  1059  func (fieldMask MetricDescriptor_StorageConfig_FieldMask) Marshal() ([]byte, error) {
  1060  	protoFieldMask := fieldMask.ToProtoFieldMask()
  1061  	return proto.Marshal(protoFieldMask)
  1062  }
  1063  
  1064  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Unmarshal(data []byte) error {
  1065  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1066  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
  1067  		return err
  1068  	}
  1069  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1070  		return err
  1071  	}
  1072  	return nil
  1073  }
  1074  
  1075  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Size() int {
  1076  	return proto.Size(fieldMask.ToProtoFieldMask())
  1077  }
  1078  
  1079  func (fieldMask MetricDescriptor_StorageConfig_FieldMask) MarshalJSON() ([]byte, error) {
  1080  	return json.Marshal(fieldMask.ToProtoFieldMask())
  1081  }
  1082  
  1083  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) UnmarshalJSON(data []byte) error {
  1084  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1085  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
  1086  		return err
  1087  	}
  1088  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1089  		return err
  1090  	}
  1091  	return nil
  1092  }
  1093  
  1094  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) AppendPath(path MetricDescriptorStorageConfig_FieldPath) {
  1095  	fieldMask.Paths = append(fieldMask.Paths, path)
  1096  }
  1097  
  1098  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
  1099  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptorStorageConfig_FieldPath))
  1100  }
  1101  
  1102  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) GetPaths() []MetricDescriptorStorageConfig_FieldPath {
  1103  	if fieldMask == nil {
  1104  		return nil
  1105  	}
  1106  	return fieldMask.Paths
  1107  }
  1108  
  1109  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) GetRawPaths() []gotenobject.FieldPath {
  1110  	if fieldMask == nil {
  1111  		return nil
  1112  	}
  1113  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
  1114  	for _, path := range fieldMask.Paths {
  1115  		rawPaths = append(rawPaths, path)
  1116  	}
  1117  	return rawPaths
  1118  }
  1119  
  1120  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) SetFromCliFlag(raw string) error {
  1121  	path, err := ParseMetricDescriptorStorageConfig_FieldPath(raw)
  1122  	if err != nil {
  1123  		return err
  1124  	}
  1125  	fieldMask.Paths = append(fieldMask.Paths, path)
  1126  	return nil
  1127  }
  1128  
  1129  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Set(target, source *MetricDescriptor_StorageConfig) {
  1130  	for _, path := range fieldMask.Paths {
  1131  		val, _ := path.GetSingle(source)
  1132  		// if val is nil, then field does not exist in source, skip
  1133  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
  1134  		if val != nil {
  1135  			path.WithIValue(val).SetTo(&target)
  1136  		}
  1137  	}
  1138  }
  1139  
  1140  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
  1141  	fieldMask.Set(target.(*MetricDescriptor_StorageConfig), source.(*MetricDescriptor_StorageConfig))
  1142  }
  1143  
  1144  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) Project(source *MetricDescriptor_StorageConfig) *MetricDescriptor_StorageConfig {
  1145  	if source == nil {
  1146  		return nil
  1147  	}
  1148  	if fieldMask == nil {
  1149  		return source
  1150  	}
  1151  	result := &MetricDescriptor_StorageConfig{}
  1152  
  1153  	for _, p := range fieldMask.Paths {
  1154  		switch tp := p.(type) {
  1155  		case *MetricDescriptorStorageConfig_FieldTerminalPath:
  1156  			switch tp.selector {
  1157  			case MetricDescriptorStorageConfig_FieldPathSelectorStoreRawPoints:
  1158  				result.StoreRawPoints = source.StoreRawPoints
  1159  			}
  1160  		}
  1161  	}
  1162  	return result
  1163  }
  1164  
  1165  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
  1166  	return fieldMask.Project(source.(*MetricDescriptor_StorageConfig))
  1167  }
  1168  
  1169  func (fieldMask *MetricDescriptor_StorageConfig_FieldMask) PathsCount() int {
  1170  	if fieldMask == nil {
  1171  		return 0
  1172  	}
  1173  	return len(fieldMask.Paths)
  1174  }
  1175  
  1176  type MetricDescriptor_IndexSpec_Index_FieldMask struct {
  1177  	Paths []MetricDescriptorIndexSpecIndex_FieldPath
  1178  }
  1179  
  1180  func FullMetricDescriptor_IndexSpec_Index_FieldMask() *MetricDescriptor_IndexSpec_Index_FieldMask {
  1181  	res := &MetricDescriptor_IndexSpec_Index_FieldMask{}
  1182  	res.Paths = append(res.Paths, &MetricDescriptorIndexSpecIndex_FieldTerminalPath{selector: MetricDescriptorIndexSpecIndex_FieldPathSelectorPromotedLabels})
  1183  	res.Paths = append(res.Paths, &MetricDescriptorIndexSpecIndex_FieldTerminalPath{selector: MetricDescriptorIndexSpecIndex_FieldPathSelectorWriteOnly})
  1184  	return res
  1185  }
  1186  
  1187  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) String() string {
  1188  	if fieldMask == nil {
  1189  		return "<nil>"
  1190  	}
  1191  	pathsStr := make([]string, 0, len(fieldMask.Paths))
  1192  	for _, path := range fieldMask.Paths {
  1193  		pathsStr = append(pathsStr, path.String())
  1194  	}
  1195  	return strings.Join(pathsStr, ", ")
  1196  }
  1197  
  1198  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) IsFull() bool {
  1199  	if fieldMask == nil {
  1200  		return false
  1201  	}
  1202  	presentSelectors := make([]bool, 2)
  1203  	for _, path := range fieldMask.Paths {
  1204  		if asFinal, ok := path.(*MetricDescriptorIndexSpecIndex_FieldTerminalPath); ok {
  1205  			presentSelectors[int(asFinal.selector)] = true
  1206  		}
  1207  	}
  1208  	for _, flag := range presentSelectors {
  1209  		if !flag {
  1210  			return false
  1211  		}
  1212  	}
  1213  	return true
  1214  }
  1215  
  1216  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) ProtoReflect() preflect.Message {
  1217  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
  1218  		return ParseMetricDescriptorIndexSpecIndex_FieldPath(raw)
  1219  	})
  1220  }
  1221  
  1222  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) ProtoMessage() {}
  1223  
  1224  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Reset() {
  1225  	if fieldMask != nil {
  1226  		fieldMask.Paths = nil
  1227  	}
  1228  }
  1229  
  1230  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Subtract(other *MetricDescriptor_IndexSpec_Index_FieldMask) *MetricDescriptor_IndexSpec_Index_FieldMask {
  1231  	result := &MetricDescriptor_IndexSpec_Index_FieldMask{}
  1232  	removedSelectors := make([]bool, 2)
  1233  
  1234  	for _, path := range other.GetPaths() {
  1235  		switch tp := path.(type) {
  1236  		case *MetricDescriptorIndexSpecIndex_FieldTerminalPath:
  1237  			removedSelectors[int(tp.selector)] = true
  1238  		}
  1239  	}
  1240  	for _, path := range fieldMask.GetPaths() {
  1241  		if !removedSelectors[int(path.Selector())] {
  1242  			result.Paths = append(result.Paths, path)
  1243  		}
  1244  	}
  1245  
  1246  	if len(result.Paths) == 0 {
  1247  		return nil
  1248  	}
  1249  	return result
  1250  }
  1251  
  1252  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
  1253  	return fieldMask.Subtract(other.(*MetricDescriptor_IndexSpec_Index_FieldMask))
  1254  }
  1255  
  1256  // FilterInputFields generates copy of field paths with output_only field paths removed
  1257  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) FilterInputFields() *MetricDescriptor_IndexSpec_Index_FieldMask {
  1258  	result := &MetricDescriptor_IndexSpec_Index_FieldMask{}
  1259  	result.Paths = append(result.Paths, fieldMask.Paths...)
  1260  	return result
  1261  }
  1262  
  1263  // ToFieldMask is used for proto conversions
  1264  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
  1265  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1266  	for _, path := range fieldMask.Paths {
  1267  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
  1268  	}
  1269  	return protoFieldMask
  1270  }
  1271  
  1272  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
  1273  	if fieldMask == nil {
  1274  		return status.Error(codes.Internal, "target field mask is nil")
  1275  	}
  1276  	fieldMask.Paths = make([]MetricDescriptorIndexSpecIndex_FieldPath, 0, len(protoFieldMask.Paths))
  1277  	for _, strPath := range protoFieldMask.Paths {
  1278  		path, err := ParseMetricDescriptorIndexSpecIndex_FieldPath(strPath)
  1279  		if err != nil {
  1280  			return err
  1281  		}
  1282  		fieldMask.Paths = append(fieldMask.Paths, path)
  1283  	}
  1284  	return nil
  1285  }
  1286  
  1287  // implement methods required by customType
  1288  func (fieldMask MetricDescriptor_IndexSpec_Index_FieldMask) Marshal() ([]byte, error) {
  1289  	protoFieldMask := fieldMask.ToProtoFieldMask()
  1290  	return proto.Marshal(protoFieldMask)
  1291  }
  1292  
  1293  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Unmarshal(data []byte) error {
  1294  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1295  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
  1296  		return err
  1297  	}
  1298  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1299  		return err
  1300  	}
  1301  	return nil
  1302  }
  1303  
  1304  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Size() int {
  1305  	return proto.Size(fieldMask.ToProtoFieldMask())
  1306  }
  1307  
  1308  func (fieldMask MetricDescriptor_IndexSpec_Index_FieldMask) MarshalJSON() ([]byte, error) {
  1309  	return json.Marshal(fieldMask.ToProtoFieldMask())
  1310  }
  1311  
  1312  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) UnmarshalJSON(data []byte) error {
  1313  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1314  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
  1315  		return err
  1316  	}
  1317  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1318  		return err
  1319  	}
  1320  	return nil
  1321  }
  1322  
  1323  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) AppendPath(path MetricDescriptorIndexSpecIndex_FieldPath) {
  1324  	fieldMask.Paths = append(fieldMask.Paths, path)
  1325  }
  1326  
  1327  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
  1328  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptorIndexSpecIndex_FieldPath))
  1329  }
  1330  
  1331  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) GetPaths() []MetricDescriptorIndexSpecIndex_FieldPath {
  1332  	if fieldMask == nil {
  1333  		return nil
  1334  	}
  1335  	return fieldMask.Paths
  1336  }
  1337  
  1338  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) GetRawPaths() []gotenobject.FieldPath {
  1339  	if fieldMask == nil {
  1340  		return nil
  1341  	}
  1342  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
  1343  	for _, path := range fieldMask.Paths {
  1344  		rawPaths = append(rawPaths, path)
  1345  	}
  1346  	return rawPaths
  1347  }
  1348  
  1349  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) SetFromCliFlag(raw string) error {
  1350  	path, err := ParseMetricDescriptorIndexSpecIndex_FieldPath(raw)
  1351  	if err != nil {
  1352  		return err
  1353  	}
  1354  	fieldMask.Paths = append(fieldMask.Paths, path)
  1355  	return nil
  1356  }
  1357  
  1358  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Set(target, source *MetricDescriptor_IndexSpec_Index) {
  1359  	for _, path := range fieldMask.Paths {
  1360  		val, _ := path.GetSingle(source)
  1361  		// if val is nil, then field does not exist in source, skip
  1362  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
  1363  		if val != nil {
  1364  			path.WithIValue(val).SetTo(&target)
  1365  		}
  1366  	}
  1367  }
  1368  
  1369  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
  1370  	fieldMask.Set(target.(*MetricDescriptor_IndexSpec_Index), source.(*MetricDescriptor_IndexSpec_Index))
  1371  }
  1372  
  1373  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) Project(source *MetricDescriptor_IndexSpec_Index) *MetricDescriptor_IndexSpec_Index {
  1374  	if source == nil {
  1375  		return nil
  1376  	}
  1377  	if fieldMask == nil {
  1378  		return source
  1379  	}
  1380  	result := &MetricDescriptor_IndexSpec_Index{}
  1381  
  1382  	for _, p := range fieldMask.Paths {
  1383  		switch tp := p.(type) {
  1384  		case *MetricDescriptorIndexSpecIndex_FieldTerminalPath:
  1385  			switch tp.selector {
  1386  			case MetricDescriptorIndexSpecIndex_FieldPathSelectorPromotedLabels:
  1387  				result.PromotedLabels = source.PromotedLabels
  1388  			case MetricDescriptorIndexSpecIndex_FieldPathSelectorWriteOnly:
  1389  				result.WriteOnly = source.WriteOnly
  1390  			}
  1391  		}
  1392  	}
  1393  	return result
  1394  }
  1395  
  1396  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
  1397  	return fieldMask.Project(source.(*MetricDescriptor_IndexSpec_Index))
  1398  }
  1399  
  1400  func (fieldMask *MetricDescriptor_IndexSpec_Index_FieldMask) PathsCount() int {
  1401  	if fieldMask == nil {
  1402  		return 0
  1403  	}
  1404  	return len(fieldMask.Paths)
  1405  }
  1406  
  1407  type MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask struct {
  1408  	Paths []MetricDescriptorIndexSpecPerMonitoredResource_FieldPath
  1409  }
  1410  
  1411  func FullMetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask() *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask {
  1412  	res := &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{}
  1413  	res.Paths = append(res.Paths, &MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath{selector: MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorResource})
  1414  	res.Paths = append(res.Paths, &MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath{selector: MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices})
  1415  	return res
  1416  }
  1417  
  1418  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) String() string {
  1419  	if fieldMask == nil {
  1420  		return "<nil>"
  1421  	}
  1422  	pathsStr := make([]string, 0, len(fieldMask.Paths))
  1423  	for _, path := range fieldMask.Paths {
  1424  		pathsStr = append(pathsStr, path.String())
  1425  	}
  1426  	return strings.Join(pathsStr, ", ")
  1427  }
  1428  
  1429  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) IsFull() bool {
  1430  	if fieldMask == nil {
  1431  		return false
  1432  	}
  1433  	presentSelectors := make([]bool, 2)
  1434  	for _, path := range fieldMask.Paths {
  1435  		if asFinal, ok := path.(*MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath); ok {
  1436  			presentSelectors[int(asFinal.selector)] = true
  1437  		}
  1438  	}
  1439  	for _, flag := range presentSelectors {
  1440  		if !flag {
  1441  			return false
  1442  		}
  1443  	}
  1444  	return true
  1445  }
  1446  
  1447  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) ProtoReflect() preflect.Message {
  1448  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
  1449  		return ParseMetricDescriptorIndexSpecPerMonitoredResource_FieldPath(raw)
  1450  	})
  1451  }
  1452  
  1453  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) ProtoMessage() {}
  1454  
  1455  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Reset() {
  1456  	if fieldMask != nil {
  1457  		fieldMask.Paths = nil
  1458  	}
  1459  }
  1460  
  1461  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Subtract(other *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask {
  1462  	result := &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{}
  1463  	removedSelectors := make([]bool, 2)
  1464  	otherSubMasks := map[MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelector]gotenobject.FieldMask{
  1465  		MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices: &MetricDescriptor_IndexSpec_Index_FieldMask{},
  1466  	}
  1467  	mySubMasks := map[MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelector]gotenobject.FieldMask{
  1468  		MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices: &MetricDescriptor_IndexSpec_Index_FieldMask{},
  1469  	}
  1470  
  1471  	for _, path := range other.GetPaths() {
  1472  		switch tp := path.(type) {
  1473  		case *MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath:
  1474  			removedSelectors[int(tp.selector)] = true
  1475  		case *MetricDescriptorIndexSpecPerMonitoredResource_FieldSubPath:
  1476  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
  1477  		}
  1478  	}
  1479  	for _, path := range fieldMask.GetPaths() {
  1480  		if !removedSelectors[int(path.Selector())] {
  1481  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
  1482  				if tp, ok := path.(*MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath); ok {
  1483  					switch tp.selector {
  1484  					case MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices:
  1485  						mySubMasks[MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices] = FullMetricDescriptor_IndexSpec_Index_FieldMask()
  1486  					}
  1487  				} else if tp, ok := path.(*MetricDescriptorIndexSpecPerMonitoredResource_FieldSubPath); ok {
  1488  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
  1489  				}
  1490  			} else {
  1491  				result.Paths = append(result.Paths, path)
  1492  			}
  1493  		}
  1494  	}
  1495  	for selector, mySubMask := range mySubMasks {
  1496  		if mySubMask.PathsCount() > 0 {
  1497  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
  1498  				result.Paths = append(result.Paths, &MetricDescriptorIndexSpecPerMonitoredResource_FieldSubPath{selector: selector, subPath: allowedPath})
  1499  			}
  1500  		}
  1501  	}
  1502  
  1503  	if len(result.Paths) == 0 {
  1504  		return nil
  1505  	}
  1506  	return result
  1507  }
  1508  
  1509  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
  1510  	return fieldMask.Subtract(other.(*MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask))
  1511  }
  1512  
  1513  // FilterInputFields generates copy of field paths with output_only field paths removed
  1514  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) FilterInputFields() *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask {
  1515  	result := &MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask{}
  1516  	result.Paths = append(result.Paths, fieldMask.Paths...)
  1517  	return result
  1518  }
  1519  
  1520  // ToFieldMask is used for proto conversions
  1521  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
  1522  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1523  	for _, path := range fieldMask.Paths {
  1524  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
  1525  	}
  1526  	return protoFieldMask
  1527  }
  1528  
  1529  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
  1530  	if fieldMask == nil {
  1531  		return status.Error(codes.Internal, "target field mask is nil")
  1532  	}
  1533  	fieldMask.Paths = make([]MetricDescriptorIndexSpecPerMonitoredResource_FieldPath, 0, len(protoFieldMask.Paths))
  1534  	for _, strPath := range protoFieldMask.Paths {
  1535  		path, err := ParseMetricDescriptorIndexSpecPerMonitoredResource_FieldPath(strPath)
  1536  		if err != nil {
  1537  			return err
  1538  		}
  1539  		fieldMask.Paths = append(fieldMask.Paths, path)
  1540  	}
  1541  	return nil
  1542  }
  1543  
  1544  // implement methods required by customType
  1545  func (fieldMask MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Marshal() ([]byte, error) {
  1546  	protoFieldMask := fieldMask.ToProtoFieldMask()
  1547  	return proto.Marshal(protoFieldMask)
  1548  }
  1549  
  1550  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Unmarshal(data []byte) error {
  1551  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1552  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
  1553  		return err
  1554  	}
  1555  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1556  		return err
  1557  	}
  1558  	return nil
  1559  }
  1560  
  1561  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Size() int {
  1562  	return proto.Size(fieldMask.ToProtoFieldMask())
  1563  }
  1564  
  1565  func (fieldMask MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) MarshalJSON() ([]byte, error) {
  1566  	return json.Marshal(fieldMask.ToProtoFieldMask())
  1567  }
  1568  
  1569  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) UnmarshalJSON(data []byte) error {
  1570  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
  1571  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
  1572  		return err
  1573  	}
  1574  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
  1575  		return err
  1576  	}
  1577  	return nil
  1578  }
  1579  
  1580  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) AppendPath(path MetricDescriptorIndexSpecPerMonitoredResource_FieldPath) {
  1581  	fieldMask.Paths = append(fieldMask.Paths, path)
  1582  }
  1583  
  1584  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
  1585  	fieldMask.Paths = append(fieldMask.Paths, path.(MetricDescriptorIndexSpecPerMonitoredResource_FieldPath))
  1586  }
  1587  
  1588  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) GetPaths() []MetricDescriptorIndexSpecPerMonitoredResource_FieldPath {
  1589  	if fieldMask == nil {
  1590  		return nil
  1591  	}
  1592  	return fieldMask.Paths
  1593  }
  1594  
  1595  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) GetRawPaths() []gotenobject.FieldPath {
  1596  	if fieldMask == nil {
  1597  		return nil
  1598  	}
  1599  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
  1600  	for _, path := range fieldMask.Paths {
  1601  		rawPaths = append(rawPaths, path)
  1602  	}
  1603  	return rawPaths
  1604  }
  1605  
  1606  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) SetFromCliFlag(raw string) error {
  1607  	path, err := ParseMetricDescriptorIndexSpecPerMonitoredResource_FieldPath(raw)
  1608  	if err != nil {
  1609  		return err
  1610  	}
  1611  	fieldMask.Paths = append(fieldMask.Paths, path)
  1612  	return nil
  1613  }
  1614  
  1615  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Set(target, source *MetricDescriptor_IndexSpec_PerMonitoredResource) {
  1616  	for _, path := range fieldMask.Paths {
  1617  		val, _ := path.GetSingle(source)
  1618  		// if val is nil, then field does not exist in source, skip
  1619  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
  1620  		if val != nil {
  1621  			path.WithIValue(val).SetTo(&target)
  1622  		}
  1623  	}
  1624  }
  1625  
  1626  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
  1627  	fieldMask.Set(target.(*MetricDescriptor_IndexSpec_PerMonitoredResource), source.(*MetricDescriptor_IndexSpec_PerMonitoredResource))
  1628  }
  1629  
  1630  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) Project(source *MetricDescriptor_IndexSpec_PerMonitoredResource) *MetricDescriptor_IndexSpec_PerMonitoredResource {
  1631  	if source == nil {
  1632  		return nil
  1633  	}
  1634  	if fieldMask == nil {
  1635  		return source
  1636  	}
  1637  	result := &MetricDescriptor_IndexSpec_PerMonitoredResource{}
  1638  	indicesMask := &MetricDescriptor_IndexSpec_Index_FieldMask{}
  1639  	wholeIndicesAccepted := false
  1640  
  1641  	for _, p := range fieldMask.Paths {
  1642  		switch tp := p.(type) {
  1643  		case *MetricDescriptorIndexSpecPerMonitoredResource_FieldTerminalPath:
  1644  			switch tp.selector {
  1645  			case MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorResource:
  1646  				result.Resource = source.Resource
  1647  			case MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices:
  1648  				result.Indices = source.Indices
  1649  				wholeIndicesAccepted = true
  1650  			}
  1651  		case *MetricDescriptorIndexSpecPerMonitoredResource_FieldSubPath:
  1652  			switch tp.selector {
  1653  			case MetricDescriptorIndexSpecPerMonitoredResource_FieldPathSelectorIndices:
  1654  				indicesMask.AppendPath(tp.subPath.(MetricDescriptorIndexSpecIndex_FieldPath))
  1655  			}
  1656  		}
  1657  	}
  1658  	if wholeIndicesAccepted == false && len(indicesMask.Paths) > 0 {
  1659  		for _, sourceItem := range source.GetIndices() {
  1660  			result.Indices = append(result.Indices, indicesMask.Project(sourceItem))
  1661  		}
  1662  	}
  1663  	return result
  1664  }
  1665  
  1666  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
  1667  	return fieldMask.Project(source.(*MetricDescriptor_IndexSpec_PerMonitoredResource))
  1668  }
  1669  
  1670  func (fieldMask *MetricDescriptor_IndexSpec_PerMonitoredResource_FieldMask) PathsCount() int {
  1671  	if fieldMask == nil {
  1672  		return 0
  1673  	}
  1674  	return len(fieldMask.Paths)
  1675  }