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