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