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

     1  // Code generated by protoc-gen-goten-object
     2  // File: edgelq/iam/proto/v1/project.proto
     3  // DO NOT EDIT!!!
     4  
     5  package project
     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  	iam_common "github.com/cloudwan/edgelq-sdk/iam/resources/v1/common"
    23  	organization "github.com/cloudwan/edgelq-sdk/iam/resources/v1/organization"
    24  	meta_service "github.com/cloudwan/goten-sdk/meta-service/resources/v1/service"
    25  	meta "github.com/cloudwan/goten-sdk/types/meta"
    26  	multi_region_policy "github.com/cloudwan/goten-sdk/types/multi_region_policy"
    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  	_ = &iam_common.PCR{}
    46  	_ = &organization.Organization{}
    47  	_ = &meta_service.Service{}
    48  	_ = &meta.Meta{}
    49  	_ = &multi_region_policy.MultiRegionPolicy{}
    50  )
    51  
    52  type Project_FieldMask struct {
    53  	Paths []Project_FieldPath
    54  }
    55  
    56  func FullProject_FieldMask() *Project_FieldMask {
    57  	res := &Project_FieldMask{}
    58  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorName})
    59  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorMetadata})
    60  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorTitle})
    61  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorDescription})
    62  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorParentOrganization})
    63  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorMultiRegionPolicy})
    64  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorEnabledServices})
    65  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorBusinessTier})
    66  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorServiceTiers})
    67  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorRootOrganization})
    68  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorAncestryPath})
    69  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorServiceErrors})
    70  	res.Paths = append(res.Paths, &Project_FieldTerminalPath{selector: Project_FieldPathSelectorServicesGeneration})
    71  	return res
    72  }
    73  
    74  func (fieldMask *Project_FieldMask) String() string {
    75  	if fieldMask == nil {
    76  		return "<nil>"
    77  	}
    78  	pathsStr := make([]string, 0, len(fieldMask.Paths))
    79  	for _, path := range fieldMask.Paths {
    80  		pathsStr = append(pathsStr, path.String())
    81  	}
    82  	return strings.Join(pathsStr, ", ")
    83  }
    84  
    85  func (fieldMask *Project_FieldMask) IsFull() bool {
    86  	if fieldMask == nil {
    87  		return false
    88  	}
    89  	presentSelectors := make([]bool, 13)
    90  	for _, path := range fieldMask.Paths {
    91  		if asFinal, ok := path.(*Project_FieldTerminalPath); ok {
    92  			presentSelectors[int(asFinal.selector)] = true
    93  		}
    94  	}
    95  	for _, flag := range presentSelectors {
    96  		if !flag {
    97  			return false
    98  		}
    99  	}
   100  	return true
   101  }
   102  
   103  func (fieldMask *Project_FieldMask) ProtoReflect() preflect.Message {
   104  	return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) {
   105  		return ParseProject_FieldPath(raw)
   106  	})
   107  }
   108  
   109  func (fieldMask *Project_FieldMask) ProtoMessage() {}
   110  
   111  func (fieldMask *Project_FieldMask) Reset() {
   112  	if fieldMask != nil {
   113  		fieldMask.Paths = nil
   114  	}
   115  }
   116  
   117  func (fieldMask *Project_FieldMask) Subtract(other *Project_FieldMask) *Project_FieldMask {
   118  	result := &Project_FieldMask{}
   119  	removedSelectors := make([]bool, 13)
   120  	otherSubMasks := map[Project_FieldPathSelector]gotenobject.FieldMask{
   121  		Project_FieldPathSelectorMetadata:          &meta.Meta_FieldMask{},
   122  		Project_FieldPathSelectorMultiRegionPolicy: &multi_region_policy.MultiRegionPolicy_FieldMask{},
   123  		Project_FieldPathSelectorServiceTiers:      &iam_common.ServiceBusinessTier_FieldMask{},
   124  	}
   125  	mySubMasks := map[Project_FieldPathSelector]gotenobject.FieldMask{
   126  		Project_FieldPathSelectorMetadata:          &meta.Meta_FieldMask{},
   127  		Project_FieldPathSelectorMultiRegionPolicy: &multi_region_policy.MultiRegionPolicy_FieldMask{},
   128  		Project_FieldPathSelectorServiceTiers:      &iam_common.ServiceBusinessTier_FieldMask{},
   129  	}
   130  
   131  	for _, path := range other.GetPaths() {
   132  		switch tp := path.(type) {
   133  		case *Project_FieldTerminalPath:
   134  			removedSelectors[int(tp.selector)] = true
   135  		case *Project_FieldSubPath:
   136  			otherSubMasks[tp.selector].AppendRawPath(tp.subPath)
   137  		}
   138  	}
   139  	for _, path := range fieldMask.GetPaths() {
   140  		if !removedSelectors[int(path.Selector())] {
   141  			if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 {
   142  				if tp, ok := path.(*Project_FieldTerminalPath); ok {
   143  					switch tp.selector {
   144  					case Project_FieldPathSelectorMetadata:
   145  						mySubMasks[Project_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask()
   146  					case Project_FieldPathSelectorMultiRegionPolicy:
   147  						mySubMasks[Project_FieldPathSelectorMultiRegionPolicy] = multi_region_policy.FullMultiRegionPolicy_FieldMask()
   148  					case Project_FieldPathSelectorServiceTiers:
   149  						mySubMasks[Project_FieldPathSelectorServiceTiers] = iam_common.FullServiceBusinessTier_FieldMask()
   150  					}
   151  				} else if tp, ok := path.(*Project_FieldSubPath); ok {
   152  					mySubMasks[tp.selector].AppendRawPath(tp.subPath)
   153  				}
   154  			} else {
   155  				result.Paths = append(result.Paths, path)
   156  			}
   157  		}
   158  	}
   159  	for selector, mySubMask := range mySubMasks {
   160  		if mySubMask.PathsCount() > 0 {
   161  			for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() {
   162  				result.Paths = append(result.Paths, &Project_FieldSubPath{selector: selector, subPath: allowedPath})
   163  			}
   164  		}
   165  	}
   166  
   167  	if len(result.Paths) == 0 {
   168  		return nil
   169  	}
   170  	return result
   171  }
   172  
   173  func (fieldMask *Project_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask {
   174  	return fieldMask.Subtract(other.(*Project_FieldMask))
   175  }
   176  
   177  // FilterInputFields generates copy of field paths with output_only field paths removed
   178  func (fieldMask *Project_FieldMask) FilterInputFields() *Project_FieldMask {
   179  	result := &Project_FieldMask{}
   180  	for _, path := range fieldMask.Paths {
   181  		switch path.Selector() {
   182  		case Project_FieldPathSelectorServicesGeneration:
   183  		case Project_FieldPathSelectorMetadata:
   184  			if _, ok := path.(*Project_FieldTerminalPath); ok {
   185  				for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths {
   186  					result.Paths = append(result.Paths, &Project_FieldSubPath{selector: path.Selector(), subPath: subpath})
   187  				}
   188  			} else if sub, ok := path.(*Project_FieldSubPath); ok {
   189  				selectedMask := &meta.Meta_FieldMask{
   190  					Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)},
   191  				}
   192  				for _, allowedPath := range selectedMask.FilterInputFields().Paths {
   193  					result.Paths = append(result.Paths, &Project_FieldSubPath{selector: Project_FieldPathSelectorMetadata, subPath: allowedPath})
   194  				}
   195  			}
   196  		default:
   197  			result.Paths = append(result.Paths, path)
   198  		}
   199  	}
   200  	return result
   201  }
   202  
   203  // ToFieldMask is used for proto conversions
   204  func (fieldMask *Project_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask {
   205  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   206  	for _, path := range fieldMask.Paths {
   207  		protoFieldMask.Paths = append(protoFieldMask.Paths, path.String())
   208  	}
   209  	return protoFieldMask
   210  }
   211  
   212  func (fieldMask *Project_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error {
   213  	if fieldMask == nil {
   214  		return status.Error(codes.Internal, "target field mask is nil")
   215  	}
   216  	fieldMask.Paths = make([]Project_FieldPath, 0, len(protoFieldMask.Paths))
   217  	for _, strPath := range protoFieldMask.Paths {
   218  		path, err := ParseProject_FieldPath(strPath)
   219  		if err != nil {
   220  			return err
   221  		}
   222  		fieldMask.Paths = append(fieldMask.Paths, path)
   223  	}
   224  	return nil
   225  }
   226  
   227  // implement methods required by customType
   228  func (fieldMask Project_FieldMask) Marshal() ([]byte, error) {
   229  	protoFieldMask := fieldMask.ToProtoFieldMask()
   230  	return proto.Marshal(protoFieldMask)
   231  }
   232  
   233  func (fieldMask *Project_FieldMask) Unmarshal(data []byte) error {
   234  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   235  	if err := proto.Unmarshal(data, protoFieldMask); err != nil {
   236  		return err
   237  	}
   238  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   239  		return err
   240  	}
   241  	return nil
   242  }
   243  
   244  func (fieldMask *Project_FieldMask) Size() int {
   245  	return proto.Size(fieldMask.ToProtoFieldMask())
   246  }
   247  
   248  func (fieldMask Project_FieldMask) MarshalJSON() ([]byte, error) {
   249  	return json.Marshal(fieldMask.ToProtoFieldMask())
   250  }
   251  
   252  func (fieldMask *Project_FieldMask) UnmarshalJSON(data []byte) error {
   253  	protoFieldMask := &googlefieldmaskpb.FieldMask{}
   254  	if err := json.Unmarshal(data, protoFieldMask); err != nil {
   255  		return err
   256  	}
   257  	if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil {
   258  		return err
   259  	}
   260  	return nil
   261  }
   262  
   263  func (fieldMask *Project_FieldMask) AppendPath(path Project_FieldPath) {
   264  	fieldMask.Paths = append(fieldMask.Paths, path)
   265  }
   266  
   267  func (fieldMask *Project_FieldMask) AppendRawPath(path gotenobject.FieldPath) {
   268  	fieldMask.Paths = append(fieldMask.Paths, path.(Project_FieldPath))
   269  }
   270  
   271  func (fieldMask *Project_FieldMask) GetPaths() []Project_FieldPath {
   272  	if fieldMask == nil {
   273  		return nil
   274  	}
   275  	return fieldMask.Paths
   276  }
   277  
   278  func (fieldMask *Project_FieldMask) GetRawPaths() []gotenobject.FieldPath {
   279  	if fieldMask == nil {
   280  		return nil
   281  	}
   282  	rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths))
   283  	for _, path := range fieldMask.Paths {
   284  		rawPaths = append(rawPaths, path)
   285  	}
   286  	return rawPaths
   287  }
   288  
   289  func (fieldMask *Project_FieldMask) SetFromCliFlag(raw string) error {
   290  	path, err := ParseProject_FieldPath(raw)
   291  	if err != nil {
   292  		return err
   293  	}
   294  	fieldMask.Paths = append(fieldMask.Paths, path)
   295  	return nil
   296  }
   297  
   298  func (fieldMask *Project_FieldMask) Set(target, source *Project) {
   299  	for _, path := range fieldMask.Paths {
   300  		val, _ := path.GetSingle(source)
   301  		// if val is nil, then field does not exist in source, skip
   302  		// otherwise, process (can still reflect.ValueOf(val).IsNil!)
   303  		if val != nil {
   304  			path.WithIValue(val).SetTo(&target)
   305  		}
   306  	}
   307  }
   308  
   309  func (fieldMask *Project_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) {
   310  	fieldMask.Set(target.(*Project), source.(*Project))
   311  }
   312  
   313  func (fieldMask *Project_FieldMask) Project(source *Project) *Project {
   314  	if source == nil {
   315  		return nil
   316  	}
   317  	if fieldMask == nil {
   318  		return source
   319  	}
   320  	result := &Project{}
   321  	metadataMask := &meta.Meta_FieldMask{}
   322  	wholeMetadataAccepted := false
   323  	multiRegionPolicyMask := &multi_region_policy.MultiRegionPolicy_FieldMask{}
   324  	wholeMultiRegionPolicyAccepted := false
   325  	serviceTiersMask := &iam_common.ServiceBusinessTier_FieldMask{}
   326  	wholeServiceTiersAccepted := false
   327  	var serviceErrorsMapKeys []string
   328  	wholeServiceErrorsAccepted := false
   329  
   330  	for _, p := range fieldMask.Paths {
   331  		switch tp := p.(type) {
   332  		case *Project_FieldTerminalPath:
   333  			switch tp.selector {
   334  			case Project_FieldPathSelectorName:
   335  				result.Name = source.Name
   336  			case Project_FieldPathSelectorMetadata:
   337  				result.Metadata = source.Metadata
   338  				wholeMetadataAccepted = true
   339  			case Project_FieldPathSelectorTitle:
   340  				result.Title = source.Title
   341  			case Project_FieldPathSelectorDescription:
   342  				result.Description = source.Description
   343  			case Project_FieldPathSelectorParentOrganization:
   344  				result.ParentOrganization = source.ParentOrganization
   345  			case Project_FieldPathSelectorMultiRegionPolicy:
   346  				result.MultiRegionPolicy = source.MultiRegionPolicy
   347  				wholeMultiRegionPolicyAccepted = true
   348  			case Project_FieldPathSelectorEnabledServices:
   349  				result.EnabledServices = source.EnabledServices
   350  			case Project_FieldPathSelectorBusinessTier:
   351  				result.BusinessTier = source.BusinessTier
   352  			case Project_FieldPathSelectorServiceTiers:
   353  				result.ServiceTiers = source.ServiceTiers
   354  				wholeServiceTiersAccepted = true
   355  			case Project_FieldPathSelectorRootOrganization:
   356  				result.RootOrganization = source.RootOrganization
   357  			case Project_FieldPathSelectorAncestryPath:
   358  				result.AncestryPath = source.AncestryPath
   359  			case Project_FieldPathSelectorServiceErrors:
   360  				result.ServiceErrors = source.ServiceErrors
   361  				wholeServiceErrorsAccepted = true
   362  			case Project_FieldPathSelectorServicesGeneration:
   363  				result.ServicesGeneration = source.ServicesGeneration
   364  			}
   365  		case *Project_FieldSubPath:
   366  			switch tp.selector {
   367  			case Project_FieldPathSelectorMetadata:
   368  				metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath))
   369  			case Project_FieldPathSelectorMultiRegionPolicy:
   370  				multiRegionPolicyMask.AppendPath(tp.subPath.(multi_region_policy.MultiRegionPolicy_FieldPath))
   371  			case Project_FieldPathSelectorServiceTiers:
   372  				serviceTiersMask.AppendPath(tp.subPath.(iam_common.ServiceBusinessTier_FieldPath))
   373  			}
   374  		case *Project_FieldPathMap:
   375  			switch tp.selector {
   376  			case Project_FieldPathSelectorServiceErrors:
   377  				serviceErrorsMapKeys = append(serviceErrorsMapKeys, tp.key)
   378  			}
   379  		}
   380  	}
   381  	if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 {
   382  		result.Metadata = metadataMask.Project(source.GetMetadata())
   383  	}
   384  	if wholeMultiRegionPolicyAccepted == false && len(multiRegionPolicyMask.Paths) > 0 {
   385  		result.MultiRegionPolicy = multiRegionPolicyMask.Project(source.GetMultiRegionPolicy())
   386  	}
   387  	if wholeServiceTiersAccepted == false && len(serviceTiersMask.Paths) > 0 {
   388  		for _, sourceItem := range source.GetServiceTiers() {
   389  			result.ServiceTiers = append(result.ServiceTiers, serviceTiersMask.Project(sourceItem))
   390  		}
   391  	}
   392  	if wholeServiceErrorsAccepted == false && len(serviceErrorsMapKeys) > 0 && source.GetServiceErrors() != nil {
   393  		copiedMap := map[string]*iam_common.ServiceErrors{}
   394  		sourceMap := source.GetServiceErrors()
   395  		for _, key := range serviceErrorsMapKeys {
   396  			copiedMap[key] = sourceMap[key]
   397  		}
   398  		result.ServiceErrors = copiedMap
   399  	}
   400  	return result
   401  }
   402  
   403  func (fieldMask *Project_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt {
   404  	return fieldMask.Project(source.(*Project))
   405  }
   406  
   407  func (fieldMask *Project_FieldMask) PathsCount() int {
   408  	if fieldMask == nil {
   409  		return 0
   410  	}
   411  	return len(fieldMask.Paths)
   412  }