github.com/cloudwan/edgelq-sdk@v1.15.4/limits/resources/v1alpha2/limit/limit.pb.fieldmask.go (about) 1 // Code generated by protoc-gen-goten-object 2 // File: edgelq/limits/proto/v1alpha2/limit.proto 3 // DO NOT EDIT!!! 4 5 package limit 6 7 import ( 8 "encoding/json" 9 "strings" 10 11 "google.golang.org/grpc/codes" 12 "google.golang.org/grpc/status" 13 "google.golang.org/protobuf/proto" 14 preflect "google.golang.org/protobuf/reflect/protoreflect" 15 googlefieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" 16 17 gotenobject "github.com/cloudwan/goten-sdk/runtime/object" 18 ) 19 20 // proto imports 21 import ( 22 iam_project "github.com/cloudwan/edgelq-sdk/iam/resources/v1alpha2/project" 23 limit_pool "github.com/cloudwan/edgelq-sdk/limits/resources/v1alpha2/limit_pool" 24 meta_resource "github.com/cloudwan/edgelq-sdk/meta/resources/v1alpha2/resource" 25 meta_service "github.com/cloudwan/edgelq-sdk/meta/resources/v1alpha2/service" 26 meta "github.com/cloudwan/goten-sdk/types/meta" 27 ) 28 29 // ensure the imports are used 30 var ( 31 _ = new(json.Marshaler) 32 _ = strings.Builder{} 33 34 _ = codes.NotFound 35 _ = status.Status{} 36 _ = new(proto.Message) 37 _ = new(preflect.Message) 38 _ = googlefieldmaskpb.FieldMask{} 39 40 _ = new(gotenobject.FieldMask) 41 ) 42 43 // make sure we're using proto imports 44 var ( 45 _ = &iam_project.Project{} 46 _ = &limit_pool.LimitPool{} 47 _ = &meta_resource.Resource{} 48 _ = &meta_service.Service{} 49 _ = &meta.Meta{} 50 ) 51 52 type Limit_FieldMask struct { 53 Paths []Limit_FieldPath 54 } 55 56 func FullLimit_FieldMask() *Limit_FieldMask { 57 res := &Limit_FieldMask{} 58 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorName}) 59 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorService}) 60 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorResource}) 61 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorRegion}) 62 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorConfiguredLimit}) 63 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorActiveLimit}) 64 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorUsage}) 65 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorSource}) 66 res.Paths = append(res.Paths, &Limit_FieldTerminalPath{selector: Limit_FieldPathSelectorMetadata}) 67 return res 68 } 69 70 func (fieldMask *Limit_FieldMask) String() string { 71 if fieldMask == nil { 72 return "<nil>" 73 } 74 pathsStr := make([]string, 0, len(fieldMask.Paths)) 75 for _, path := range fieldMask.Paths { 76 pathsStr = append(pathsStr, path.String()) 77 } 78 return strings.Join(pathsStr, ", ") 79 } 80 81 func (fieldMask *Limit_FieldMask) IsFull() bool { 82 if fieldMask == nil { 83 return false 84 } 85 presentSelectors := make([]bool, 9) 86 for _, path := range fieldMask.Paths { 87 if asFinal, ok := path.(*Limit_FieldTerminalPath); ok { 88 presentSelectors[int(asFinal.selector)] = true 89 } 90 } 91 for _, flag := range presentSelectors { 92 if !flag { 93 return false 94 } 95 } 96 return true 97 } 98 99 func (fieldMask *Limit_FieldMask) ProtoReflect() preflect.Message { 100 return gotenobject.MakeFieldMaskReflection(fieldMask, func(raw string) (gotenobject.FieldPath, error) { 101 return ParseLimit_FieldPath(raw) 102 }) 103 } 104 105 func (fieldMask *Limit_FieldMask) ProtoMessage() {} 106 107 func (fieldMask *Limit_FieldMask) Reset() { 108 if fieldMask != nil { 109 fieldMask.Paths = nil 110 } 111 } 112 113 func (fieldMask *Limit_FieldMask) Subtract(other *Limit_FieldMask) *Limit_FieldMask { 114 result := &Limit_FieldMask{} 115 removedSelectors := make([]bool, 9) 116 otherSubMasks := map[Limit_FieldPathSelector]gotenobject.FieldMask{ 117 Limit_FieldPathSelectorMetadata: &meta.Meta_FieldMask{}, 118 } 119 mySubMasks := map[Limit_FieldPathSelector]gotenobject.FieldMask{ 120 Limit_FieldPathSelectorMetadata: &meta.Meta_FieldMask{}, 121 } 122 123 for _, path := range other.GetPaths() { 124 switch tp := path.(type) { 125 case *Limit_FieldTerminalPath: 126 removedSelectors[int(tp.selector)] = true 127 case *Limit_FieldSubPath: 128 otherSubMasks[tp.selector].AppendRawPath(tp.subPath) 129 } 130 } 131 for _, path := range fieldMask.GetPaths() { 132 if !removedSelectors[int(path.Selector())] { 133 if otherSubMask := otherSubMasks[path.Selector()]; otherSubMask != nil && otherSubMask.PathsCount() > 0 { 134 if tp, ok := path.(*Limit_FieldTerminalPath); ok { 135 switch tp.selector { 136 case Limit_FieldPathSelectorMetadata: 137 mySubMasks[Limit_FieldPathSelectorMetadata] = meta.FullMeta_FieldMask() 138 } 139 } else if tp, ok := path.(*Limit_FieldSubPath); ok { 140 mySubMasks[tp.selector].AppendRawPath(tp.subPath) 141 } 142 } else { 143 result.Paths = append(result.Paths, path) 144 } 145 } 146 } 147 for selector, mySubMask := range mySubMasks { 148 if mySubMask.PathsCount() > 0 { 149 for _, allowedPath := range mySubMask.SubtractRaw(otherSubMasks[selector]).GetRawPaths() { 150 result.Paths = append(result.Paths, &Limit_FieldSubPath{selector: selector, subPath: allowedPath}) 151 } 152 } 153 } 154 155 if len(result.Paths) == 0 { 156 return nil 157 } 158 return result 159 } 160 161 func (fieldMask *Limit_FieldMask) SubtractRaw(other gotenobject.FieldMask) gotenobject.FieldMask { 162 return fieldMask.Subtract(other.(*Limit_FieldMask)) 163 } 164 165 // FilterInputFields generates copy of field paths with output_only field paths removed 166 func (fieldMask *Limit_FieldMask) FilterInputFields() *Limit_FieldMask { 167 result := &Limit_FieldMask{} 168 for _, path := range fieldMask.Paths { 169 switch path.Selector() { 170 case Limit_FieldPathSelectorService: 171 case Limit_FieldPathSelectorResource: 172 case Limit_FieldPathSelectorRegion: 173 case Limit_FieldPathSelectorConfiguredLimit: 174 case Limit_FieldPathSelectorSource: 175 case Limit_FieldPathSelectorMetadata: 176 if _, ok := path.(*Limit_FieldTerminalPath); ok { 177 for _, subpath := range meta.FullMeta_FieldMask().FilterInputFields().Paths { 178 result.Paths = append(result.Paths, &Limit_FieldSubPath{selector: path.Selector(), subPath: subpath}) 179 } 180 } else if sub, ok := path.(*Limit_FieldSubPath); ok { 181 selectedMask := &meta.Meta_FieldMask{ 182 Paths: []meta.Meta_FieldPath{sub.subPath.(meta.Meta_FieldPath)}, 183 } 184 for _, allowedPath := range selectedMask.FilterInputFields().Paths { 185 result.Paths = append(result.Paths, &Limit_FieldSubPath{selector: Limit_FieldPathSelectorMetadata, subPath: allowedPath}) 186 } 187 } 188 default: 189 result.Paths = append(result.Paths, path) 190 } 191 } 192 return result 193 } 194 195 // ToFieldMask is used for proto conversions 196 func (fieldMask *Limit_FieldMask) ToProtoFieldMask() *googlefieldmaskpb.FieldMask { 197 protoFieldMask := &googlefieldmaskpb.FieldMask{} 198 for _, path := range fieldMask.Paths { 199 protoFieldMask.Paths = append(protoFieldMask.Paths, path.String()) 200 } 201 return protoFieldMask 202 } 203 204 func (fieldMask *Limit_FieldMask) FromProtoFieldMask(protoFieldMask *googlefieldmaskpb.FieldMask) error { 205 if fieldMask == nil { 206 return status.Error(codes.Internal, "target field mask is nil") 207 } 208 fieldMask.Paths = make([]Limit_FieldPath, 0, len(protoFieldMask.Paths)) 209 for _, strPath := range protoFieldMask.Paths { 210 path, err := ParseLimit_FieldPath(strPath) 211 if err != nil { 212 return err 213 } 214 fieldMask.Paths = append(fieldMask.Paths, path) 215 } 216 return nil 217 } 218 219 // implement methods required by customType 220 func (fieldMask Limit_FieldMask) Marshal() ([]byte, error) { 221 protoFieldMask := fieldMask.ToProtoFieldMask() 222 return proto.Marshal(protoFieldMask) 223 } 224 225 func (fieldMask *Limit_FieldMask) Unmarshal(data []byte) error { 226 protoFieldMask := &googlefieldmaskpb.FieldMask{} 227 if err := proto.Unmarshal(data, protoFieldMask); err != nil { 228 return err 229 } 230 if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil { 231 return err 232 } 233 return nil 234 } 235 236 func (fieldMask *Limit_FieldMask) Size() int { 237 return proto.Size(fieldMask.ToProtoFieldMask()) 238 } 239 240 func (fieldMask Limit_FieldMask) MarshalJSON() ([]byte, error) { 241 return json.Marshal(fieldMask.ToProtoFieldMask()) 242 } 243 244 func (fieldMask *Limit_FieldMask) UnmarshalJSON(data []byte) error { 245 protoFieldMask := &googlefieldmaskpb.FieldMask{} 246 if err := json.Unmarshal(data, protoFieldMask); err != nil { 247 return err 248 } 249 if err := fieldMask.FromProtoFieldMask(protoFieldMask); err != nil { 250 return err 251 } 252 return nil 253 } 254 255 func (fieldMask *Limit_FieldMask) AppendPath(path Limit_FieldPath) { 256 fieldMask.Paths = append(fieldMask.Paths, path) 257 } 258 259 func (fieldMask *Limit_FieldMask) AppendRawPath(path gotenobject.FieldPath) { 260 fieldMask.Paths = append(fieldMask.Paths, path.(Limit_FieldPath)) 261 } 262 263 func (fieldMask *Limit_FieldMask) GetPaths() []Limit_FieldPath { 264 if fieldMask == nil { 265 return nil 266 } 267 return fieldMask.Paths 268 } 269 270 func (fieldMask *Limit_FieldMask) GetRawPaths() []gotenobject.FieldPath { 271 if fieldMask == nil { 272 return nil 273 } 274 rawPaths := make([]gotenobject.FieldPath, 0, len(fieldMask.Paths)) 275 for _, path := range fieldMask.Paths { 276 rawPaths = append(rawPaths, path) 277 } 278 return rawPaths 279 } 280 281 func (fieldMask *Limit_FieldMask) SetFromCliFlag(raw string) error { 282 path, err := ParseLimit_FieldPath(raw) 283 if err != nil { 284 return err 285 } 286 fieldMask.Paths = append(fieldMask.Paths, path) 287 return nil 288 } 289 290 func (fieldMask *Limit_FieldMask) Set(target, source *Limit) { 291 for _, path := range fieldMask.Paths { 292 val, _ := path.GetSingle(source) 293 // if val is nil, then field does not exist in source, skip 294 // otherwise, process (can still reflect.ValueOf(val).IsNil!) 295 if val != nil { 296 path.WithIValue(val).SetTo(&target) 297 } 298 } 299 } 300 301 func (fieldMask *Limit_FieldMask) SetRaw(target, source gotenobject.GotenObjectExt) { 302 fieldMask.Set(target.(*Limit), source.(*Limit)) 303 } 304 305 func (fieldMask *Limit_FieldMask) Project(source *Limit) *Limit { 306 if source == nil { 307 return nil 308 } 309 if fieldMask == nil { 310 return source 311 } 312 result := &Limit{} 313 metadataMask := &meta.Meta_FieldMask{} 314 wholeMetadataAccepted := false 315 316 for _, p := range fieldMask.Paths { 317 switch tp := p.(type) { 318 case *Limit_FieldTerminalPath: 319 switch tp.selector { 320 case Limit_FieldPathSelectorName: 321 result.Name = source.Name 322 case Limit_FieldPathSelectorService: 323 result.Service = source.Service 324 case Limit_FieldPathSelectorResource: 325 result.Resource = source.Resource 326 case Limit_FieldPathSelectorRegion: 327 result.Region = source.Region 328 case Limit_FieldPathSelectorConfiguredLimit: 329 result.ConfiguredLimit = source.ConfiguredLimit 330 case Limit_FieldPathSelectorActiveLimit: 331 result.ActiveLimit = source.ActiveLimit 332 case Limit_FieldPathSelectorUsage: 333 result.Usage = source.Usage 334 case Limit_FieldPathSelectorSource: 335 result.Source = source.Source 336 case Limit_FieldPathSelectorMetadata: 337 result.Metadata = source.Metadata 338 wholeMetadataAccepted = true 339 } 340 case *Limit_FieldSubPath: 341 switch tp.selector { 342 case Limit_FieldPathSelectorMetadata: 343 metadataMask.AppendPath(tp.subPath.(meta.Meta_FieldPath)) 344 } 345 } 346 } 347 if wholeMetadataAccepted == false && len(metadataMask.Paths) > 0 { 348 result.Metadata = metadataMask.Project(source.GetMetadata()) 349 } 350 return result 351 } 352 353 func (fieldMask *Limit_FieldMask) ProjectRaw(source gotenobject.GotenObjectExt) gotenobject.GotenObjectExt { 354 return fieldMask.Project(source.(*Limit)) 355 } 356 357 func (fieldMask *Limit_FieldMask) PathsCount() int { 358 if fieldMask == nil { 359 return 0 360 } 361 return len(fieldMask.Paths) 362 }