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

     1  // Code generated by protoc-gen-goten-object
     2  // File: edgelq/alerting/proto/v1/policy.proto
     3  // DO NOT EDIT!!!
     4  
     5  package 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  	rcommon "github.com/cloudwan/edgelq-sdk/alerting/resources/v1/common"
    23  	document "github.com/cloudwan/edgelq-sdk/alerting/resources/v1/document"
    24  	notification_channel "github.com/cloudwan/edgelq-sdk/alerting/resources/v1/notification_channel"
    25  	policy_template "github.com/cloudwan/edgelq-sdk/alerting/resources/v1/policy_template"
    26  	iam_project "github.com/cloudwan/edgelq-sdk/iam/resources/v1/project"
    27  	meta "github.com/cloudwan/goten-sdk/types/meta"
    28  	fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
    29  )
    30  
    31  // ensure the imports are used
    32  var (
    33  	_ = new(json.Marshaler)
    34  	_ = strings.Builder{}
    35  
    36  	_ = codes.NotFound
    37  	_ = status.Status{}
    38  	_ = new(proto.Message)
    39  	_ = new(preflect.Message)
    40  	_ = googlefieldmaskpb.FieldMask{}
    41  
    42  	_ = new(gotenobject.FieldMask)
    43  )
    44  
    45  // make sure we're using proto imports
    46  var (
    47  	_ = &document.Document{}
    48  	_ = &notification_channel.NotificationChannel{}
    49  	_ = &policy_template.PolicyTemplate{}
    50  	_ = &rcommon.LogCndSpec{}
    51  	_ = &iam_project.Project{}
    52  	_ = &fieldmaskpb.FieldMask{}
    53  	_ = &meta.Meta{}
    54  )
    55  
    56  type Policy_FieldMask struct {
    57  	Paths []Policy_FieldPath
    58  }
    59  
    60  func FullPolicy_FieldMask() *Policy_FieldMask {
    61  	res := &Policy_FieldMask{}
    62  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorName})
    63  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorMetadata})
    64  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorDisplayName})
    65  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorDescription})
    66  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorSupportingDocs})
    67  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorSpec})
    68  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorTemplateSource})
    69  	res.Paths = append(res.Paths, &Policy_FieldTerminalPath{selector: Policy_FieldPathSelectorNotificationChannels})
    70  	return res
    71  }
    72  
    73  func (fieldMask *Policy_FieldMask) String() string {
    74  	if fieldMask == nil {
    75  		return "<nil>"
    76  	}
    77  	pathsStr := make([]string, 0, len(fieldMask.Paths))
    78  	for _, path := range fieldMask.Paths {
    79  		pathsStr = append(pathsStr, path.String())
    80  	}
    81  	return strings.Join(pathsStr, ", ")
    82  }
    83  
    84  func (fieldMask *Policy_FieldMask) IsFull() bool {
    85  	if fieldMask == nil {
    86  		return false
    87  	}
    88  	presentSelectors := make([]bool, 8)
    89  	for _, path := range fieldMask.Paths {
    90  		if asFinal, ok := path.(*Policy_FieldTerminalPath); ok {
    91  			presentSelectors[int(asFinal.selector)] = true
    92  		}
    93  	}
    94  	for _, flag := range presentSelectors {
    95  		if !flag {
    96  			return false
    97  		}
    98  	}
    99  	return true
   100  }
   101  
   102  func (fieldMask *Policy_FieldMask) ProtoReflect() preflect.Message {
   103  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   104  		return ParsePolicy_FieldPath(raw)
   105  	})
   106  }
   107  
   108  func (fieldMask *Policy_FieldMask) ProtoMessage() {}
   109  
   110  func (fieldMask *Policy_FieldMask) Reset() {
   111  	if fieldMask != nil {
   112  		fieldMask.Paths = nil
   113  	}
   114  }
   115  
   116  func (fieldMask *Policy_FieldMask) Subtract(other *Policy_FieldMask) *Policy_FieldMask {
   117  	result := &Policy_FieldMask{}
   118  	removedSelectors := make([]bool, 8)
   119  	otherSubMasks := map[Policy_FieldPathSelector]gotenobject.FieldMask{
   120  		Policy_FieldPathSelectorMetadata:       &meta.Meta_FieldMask{},
   121  		Policy_FieldPathSelectorSpec:           &rcommon.PolicySpec_FieldMask{},
   122  		Policy_FieldPathSelectorTemplateSource: &Policy_TemplateSource_FieldMask{},
   123  	}
   124  	mySubMasks := map[Policy_FieldPathSelector]gotenobject.FieldMask{
   125  		Policy_FieldPathSelectorMetadata:       &meta.Meta_FieldMask{},
   126  		Policy_FieldPathSelectorSpec:           &rcommon.PolicySpec_FieldMask{},
   127  		Policy_FieldPathSelectorTemplateSource: &Policy_TemplateSource_FieldMask{},
   128  	}
   129  
   130  	for _, path := range other.GetPaths() {
   131  		switch tp := path.(type) {
   132  		case *Policy_FieldTerminalPath:
   133  			removedSelectors[int(tp.selector)] = true
   134  		case *Policy_FieldSubPath:
   135  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   136  		}
   137  	}
   138  	for _, path := range fieldMask.GetPaths() {
   139  		if !removedSelectors[int(path.Selector())] {
   140  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   141  				if tp, ok := path.(*Policy_FieldTerminalPath); ok {
   142  					switch tp.selector {
   143  					case Policy_FieldPathSelectorMetadata:
   144  						mySubMasks[Policy_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask()
   145  					case Policy_FieldPathSelectorSpec:
   146  						mySubMasks[Policy_FieldPathSelectorSpec] = rcommon.FullPolicySpec_FieldMask()
   147  					case Policy_FieldPathSelectorTemplateSource:
   148  						mySubMasks[Policy_FieldPathSelectorTemplateSource] = FullPolicy_TemplateSource_FieldMask()
   149  					}
   150  				} else if tp, ok := path.(*Policy_FieldSubPath); ok {
   151  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   152  				}
   153  			} else {
   154  				result.Paths = append(result.Paths, path)
   155  			}
   156  		}
   157  	}
   158  	for selector, mySubMask := range mySubMasks {
   159  		if mySubMask.PathsCount() > 0 {
   160  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   161  				result.Paths = append(result.Paths, &Policy_FieldSubPath{selector: selector, subPath: allowedPath})
   162  			}
   163  		}
   164  	}
   165  
   166  	if len(result.Paths) == 0 {
   167  		return nil
   168  	}
   169  	return result
   170  }
   171  
   172  func (fieldMask *Policy_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   173  	return fieldMask.Subtract(other.(*Policy_FieldMask))
   174  }
   175  
   176  // FilterInputFields generates copy of field paths with output_only field paths removed
   177  func (fieldMask *Policy_FieldMask) FilterInputFields() *Policy_FieldMask {
   178  	result := &Policy_FieldMask{}
   179  	for _, path := range fieldMask.Paths {
   180  		switch path.Selector() {
   181  		case Policy_FieldPathSelectorMetadata:
   182  			if _, ok := path.(*Policy_FieldTerminalPath); ok {
   183  				for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths {
   184  					result.Paths = append(result.Paths, &Policy_FieldSubPath{selector: path.Selector(), subPath: subpath})
   185  				}
   186  			} else if sub, ok := path.(*Policy_FieldSubPath); ok {
   187  				selectedMask := &meta.Meta_FieldMask{
   188  					Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)},
   189  				}
   190  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   191  					result.Paths = append(result.Paths, &Policy_FieldSubPath{selector: Policy_FieldPathSelectorMetadata, subPath: allowedPath})
   192  				}
   193  			}
   194  		default:
   195  			result.Paths = append(result.Paths, path)
   196  		}
   197  	}
   198  	return result
   199  }
   200  
   201  // ToFieldMask is used for proto conversions
   202  func (fieldMask *Policy_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   203  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   204  	for _, path := range fieldMask.Paths {
   205  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   206  	}
   207  	return protoFieldMask
   208  }
   209  
   210  func (fieldMask *Policy_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   211  	if fieldMask == nil {
   212  		return status.Error(codes.Internal, "target field mask is nil")
   213  	}
   214  	fieldMask.Paths = make([]Policy_FieldPath, 0, len(protoFieldMask.Paths))
   215  	for _, strPath := range protoFieldMask.Paths {
   216  		path, err := ParsePolicy_FieldPath(strPath)
   217  		if err != nil {
   218  			return err
   219  		}
   220  		fieldMask.Paths = append(fieldMask.Paths, path)
   221  	}
   222  	return nil
   223  }
   224  
   225  // implement methods required by customType
   226  func (fieldMask Policy_FieldMask) Marshal() ([]byte, error) {
   227  	protoFieldMask := fieldMask.ToProtoFieldMask()
   228  	return proto.Marshal(protoFieldMask)
   229  }
   230  
   231  func (fieldMask *Policy_FieldMask) Unmarshal(data []byte) error {
   232  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   233  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   234  		return err
   235  	}
   236  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   237  		return err
   238  	}
   239  	return nil
   240  }
   241  
   242  func (fieldMask *Policy_FieldMask) Size() int {
   243  	return proto.Size(fieldMask.ToProtoFieldMask())
   244  }
   245  
   246  func (fieldMask Policy_FieldMask) MarshalJSON() ([]byte, error) {
   247  	return json.Marshal(fieldMask.ToProtoFieldMask())
   248  }
   249  
   250  func (fieldMask *Policy_FieldMask) UnmarshalJSON(data []byte) error {
   251  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   252  	if err := json.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 *Policy_FieldMask) AppendPath(path Policy_FieldPath) {
   262  	fieldMask.Paths = append(fieldMask.Paths, path)
   263  }
   264  
   265  func (fieldMask *Policy_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   266  	fieldMask.Paths = append(fieldMask.Paths, path.(Policy_FieldPath))
   267  }
   268  
   269  func (fieldMask *Policy_FieldMask) GetPaths() []Policy_FieldPath {
   270  	if fieldMask == nil {
   271  		return nil
   272  	}
   273  	return fieldMask.Paths
   274  }
   275  
   276  func (fieldMask *Policy_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   277  	if fieldMask == nil {
   278  		return nil
   279  	}
   280  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   281  	for _, path := range fieldMask.Paths {
   282  		rawPaths = append(rawPaths, path)
   283  	}
   284  	return rawPaths
   285  }
   286  
   287  func (fieldMask *Policy_FieldMask) SetFromCliFlag(raw string) error {
   288  	path, err := ParsePolicy_FieldPath(raw)
   289  	if err != nil {
   290  		return err
   291  	}
   292  	fieldMask.Paths = append(fieldMask.Paths, path)
   293  	return nil
   294  }
   295  
   296  func (fieldMask *Policy_FieldMask) Set(target, source *Policy) {
   297  	for _, path := range fieldMask.Paths {
   298  		val, _ := path.GetSingle(source)
   299  		// if val is nil, then field does not exist in source, skip
   300  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   301  		if val != nil {
   302  			path.WithIValue(val).SetTo(&target)
   303  		}
   304  	}
   305  }
   306  
   307  func (fieldMask *Policy_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   308  	fieldMask.Set(target.(*Policy), source.(*Policy))
   309  }
   310  
   311  func (fieldMask *Policy_FieldMask) Project(source *Policy) *Policy {
   312  	if source == nil {
   313  		return nil
   314  	}
   315  	if fieldMask == nil {
   316  		return source
   317  	}
   318  	result := &Policy{}
   319  	metadataMask := &meta.Meta_FieldMask{}
   320  	wholeMetadataAccepted := false
   321  	specMask := &rcommon.PolicySpec_FieldMask{}
   322  	wholeSpecAccepted := false
   323  	templateSourceMask := &Policy_TemplateSource_FieldMask{}
   324  	wholeTemplateSourceAccepted := false
   325  
   326  	for _, p := range fieldMask.Paths {
   327  		switch tp := p.(type) {
   328  		case *Policy_FieldTerminalPath:
   329  			switch tp.selector {
   330  			case Policy_FieldPathSelectorName:
   331  				result.Name = source.Name
   332  			case Policy_FieldPathSelectorMetadata:
   333  				result.Metadata = source.Metadata
   334  				wholeMetadataAccepted = true
   335  			case Policy_FieldPathSelectorDisplayName:
   336  				result.DisplayName = source.DisplayName
   337  			case Policy_FieldPathSelectorDescription:
   338  				result.Description = source.Description
   339  			case Policy_FieldPathSelectorSupportingDocs:
   340  				result.SupportingDocs = source.SupportingDocs
   341  			case Policy_FieldPathSelectorSpec:
   342  				result.Spec = source.Spec
   343  				wholeSpecAccepted = true
   344  			case Policy_FieldPathSelectorTemplateSource:
   345  				result.TemplateSource = source.TemplateSource
   346  				wholeTemplateSourceAccepted = true
   347  			case Policy_FieldPathSelectorNotificationChannels:
   348  				result.NotificationChannels = source.NotificationChannels
   349  			}
   350  		case *Policy_FieldSubPath:
   351  			switch tp.selector {
   352  			case Policy_FieldPathSelectorMetadata:
   353  				metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath))
   354  			case Policy_FieldPathSelectorSpec:
   355  				specMask.AppendPath(tp.subPath.(rcommon.PolicySpec_FieldPath))
   356  			case Policy_FieldPathSelectorTemplateSource:
   357  				templateSourceMask.AppendPath(tp.subPath.(PolicyTemplateSource_FieldPath))
   358  			}
   359  		}
   360  	}
   361  	if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 {
   362  		result.Metadata = metadataMask.Project(source.GetMetadata())
   363  	}
   364  	if wholeSpecAccepted == false && len(specMask.Paths) > 0 {
   365  		result.Spec = specMask.Project(source.GetSpec())
   366  	}
   367  	if wholeTemplateSourceAccepted == false && len(templateSourceMask.Paths) > 0 {
   368  		result.TemplateSource = templateSourceMask.Project(source.GetTemplateSource())
   369  	}
   370  	return result
   371  }
   372  
   373  func (fieldMask *Policy_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   374  	return fieldMask.Project(source.(*Policy))
   375  }
   376  
   377  func (fieldMask *Policy_FieldMask) PathsCount() int {
   378  	if fieldMask == nil {
   379  		return 0
   380  	}
   381  	return len(fieldMask.Paths)
   382  }
   383  
   384  type Policy_TemplateSource_FieldMask struct {
   385  	Paths []PolicyTemplateSource_FieldPath
   386  }
   387  
   388  func FullPolicy_TemplateSource_FieldMask() *Policy_TemplateSource_FieldMask {
   389  	res := &Policy_TemplateSource_FieldMask{}
   390  	res.Paths = append(res.Paths, &PolicyTemplateSource_FieldTerminalPath{selector: PolicyTemplateSource_FieldPathSelectorTemplate})
   391  	res.Paths = append(res.Paths, &PolicyTemplateSource_FieldTerminalPath{selector: PolicyTemplateSource_FieldPathSelectorUpdatedFields})
   392  	return res
   393  }
   394  
   395  func (fieldMask *Policy_TemplateSource_FieldMask) String() string {
   396  	if fieldMask == nil {
   397  		return "<nil>"
   398  	}
   399  	pathsStr := make([]string, 0, len(fieldMask.Paths))
   400  	for _, path := range fieldMask.Paths {
   401  		pathsStr = append(pathsStr, path.String())
   402  	}
   403  	return strings.Join(pathsStr, ", ")
   404  }
   405  
   406  func (fieldMask *Policy_TemplateSource_FieldMask) IsFull() bool {
   407  	if fieldMask == nil {
   408  		return false
   409  	}
   410  	presentSelectors := make([]bool, 2)
   411  	for _, path := range fieldMask.Paths {
   412  		if asFinal, ok := path.(*PolicyTemplateSource_FieldTerminalPath); ok {
   413  			presentSelectors[int(asFinal.selector)] = true
   414  		}
   415  	}
   416  	for _, flag := range presentSelectors {
   417  		if !flag {
   418  			return false
   419  		}
   420  	}
   421  	return true
   422  }
   423  
   424  func (fieldMask *Policy_TemplateSource_FieldMask) ProtoReflect() preflect.Message {
   425  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   426  		return ParsePolicyTemplateSource_FieldPath(raw)
   427  	})
   428  }
   429  
   430  func (fieldMask *Policy_TemplateSource_FieldMask) ProtoMessage() {}
   431  
   432  func (fieldMask *Policy_TemplateSource_FieldMask) Reset() {
   433  	if fieldMask != nil {
   434  		fieldMask.Paths = nil
   435  	}
   436  }
   437  
   438  func (fieldMask *Policy_TemplateSource_FieldMask) Subtract(other *Policy_TemplateSource_FieldMask) *Policy_TemplateSource_FieldMask {
   439  	result := &Policy_TemplateSource_FieldMask{}
   440  	removedSelectors := make([]bool, 2)
   441  
   442  	for _, path := range other.GetPaths() {
   443  		switch tp := path.(type) {
   444  		case *PolicyTemplateSource_FieldTerminalPath:
   445  			removedSelectors[int(tp.selector)] = true
   446  		}
   447  	}
   448  	for _, path := range fieldMask.GetPaths() {
   449  		if !removedSelectors[int(path.Selector())] {
   450  			result.Paths = append(result.Paths, path)
   451  		}
   452  	}
   453  
   454  	if len(result.Paths) == 0 {
   455  		return nil
   456  	}
   457  	return result
   458  }
   459  
   460  func (fieldMask *Policy_TemplateSource_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   461  	return fieldMask.Subtract(other.(*Policy_TemplateSource_FieldMask))
   462  }
   463  
   464  // FilterInputFields generates copy of field paths with output_only field paths removed
   465  func (fieldMask *Policy_TemplateSource_FieldMask) FilterInputFields() *Policy_TemplateSource_FieldMask {
   466  	result := &Policy_TemplateSource_FieldMask{}
   467  	result.Paths = append(result.Paths, fieldMask.Paths...)
   468  	return result
   469  }
   470  
   471  // ToFieldMask is used for proto conversions
   472  func (fieldMask *Policy_TemplateSource_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   473  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   474  	for _, path := range fieldMask.Paths {
   475  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   476  	}
   477  	return protoFieldMask
   478  }
   479  
   480  func (fieldMask *Policy_TemplateSource_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   481  	if fieldMask == nil {
   482  		return status.Error(codes.Internal, "target field mask is nil")
   483  	}
   484  	fieldMask.Paths = make([]PolicyTemplateSource_FieldPath, 0, len(protoFieldMask.Paths))
   485  	for _, strPath := range protoFieldMask.Paths {
   486  		path, err := ParsePolicyTemplateSource_FieldPath(strPath)
   487  		if err != nil {
   488  			return err
   489  		}
   490  		fieldMask.Paths = append(fieldMask.Paths, path)
   491  	}
   492  	return nil
   493  }
   494  
   495  // implement methods required by customType
   496  func (fieldMask Policy_TemplateSource_FieldMask) Marshal() ([]byte, error) {
   497  	protoFieldMask := fieldMask.ToProtoFieldMask()
   498  	return proto.Marshal(protoFieldMask)
   499  }
   500  
   501  func (fieldMask *Policy_TemplateSource_FieldMask) Unmarshal(data []byte) error {
   502  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   503  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   504  		return err
   505  	}
   506  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   507  		return err
   508  	}
   509  	return nil
   510  }
   511  
   512  func (fieldMask *Policy_TemplateSource_FieldMask) Size() int {
   513  	return proto.Size(fieldMask.ToProtoFieldMask())
   514  }
   515  
   516  func (fieldMask Policy_TemplateSource_FieldMask) MarshalJSON() ([]byte, error) {
   517  	return json.Marshal(fieldMask.ToProtoFieldMask())
   518  }
   519  
   520  func (fieldMask *Policy_TemplateSource_FieldMask) UnmarshalJSON(data []byte) error {
   521  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   522  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   523  		return err
   524  	}
   525  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   526  		return err
   527  	}
   528  	return nil
   529  }
   530  
   531  func (fieldMask *Policy_TemplateSource_FieldMask) AppendPath(path PolicyTemplateSource_FieldPath) {
   532  	fieldMask.Paths = append(fieldMask.Paths, path)
   533  }
   534  
   535  func (fieldMask *Policy_TemplateSource_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   536  	fieldMask.Paths = append(fieldMask.Paths, path.(PolicyTemplateSource_FieldPath))
   537  }
   538  
   539  func (fieldMask *Policy_TemplateSource_FieldMask) GetPaths() []PolicyTemplateSource_FieldPath {
   540  	if fieldMask == nil {
   541  		return nil
   542  	}
   543  	return fieldMask.Paths
   544  }
   545  
   546  func (fieldMask *Policy_TemplateSource_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   547  	if fieldMask == nil {
   548  		return nil
   549  	}
   550  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   551  	for _, path := range fieldMask.Paths {
   552  		rawPaths = append(rawPaths, path)
   553  	}
   554  	return rawPaths
   555  }
   556  
   557  func (fieldMask *Policy_TemplateSource_FieldMask) SetFromCliFlag(raw string) error {
   558  	path, err := ParsePolicyTemplateSource_FieldPath(raw)
   559  	if err != nil {
   560  		return err
   561  	}
   562  	fieldMask.Paths = append(fieldMask.Paths, path)
   563  	return nil
   564  }
   565  
   566  func (fieldMask *Policy_TemplateSource_FieldMask) Set(target, source *Policy_TemplateSource) {
   567  	for _, path := range fieldMask.Paths {
   568  		val, _ := path.GetSingle(source)
   569  		// if val is nil, then field does not exist in source, skip
   570  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   571  		if val != nil {
   572  			path.WithIValue(val).SetTo(&target)
   573  		}
   574  	}
   575  }
   576  
   577  func (fieldMask *Policy_TemplateSource_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   578  	fieldMask.Set(target.(*Policy_TemplateSource), source.(*Policy_TemplateSource))
   579  }
   580  
   581  func (fieldMask *Policy_TemplateSource_FieldMask) Project(source *Policy_TemplateSource) *Policy_TemplateSource {
   582  	if source == nil {
   583  		return nil
   584  	}
   585  	if fieldMask == nil {
   586  		return source
   587  	}
   588  	result := &Policy_TemplateSource{}
   589  
   590  	for _, p := range fieldMask.Paths {
   591  		switch tp := p.(type) {
   592  		case *PolicyTemplateSource_FieldTerminalPath:
   593  			switch tp.selector {
   594  			case PolicyTemplateSource_FieldPathSelectorTemplate:
   595  				result.Template = source.Template
   596  			case PolicyTemplateSource_FieldPathSelectorUpdatedFields:
   597  				result.UpdatedFields = source.UpdatedFields
   598  			}
   599  		}
   600  	}
   601  	return result
   602  }
   603  
   604  func (fieldMask *Policy_TemplateSource_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   605  	return fieldMask.Project(source.(*Policy_TemplateSource))
   606  }
   607  
   608  func (fieldMask *Policy_TemplateSource_FieldMask) PathsCount() int {
   609  	if fieldMask == nil {
   610  		return 0
   611  	}
   612  	return len(fieldMask.Paths)
   613  }