diff options
author | 6543 <6543@obermui.de> | 2020-04-19 22:23:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-19 21:23:05 +0100 |
commit | 82dbb34c9c2d0efa8eeb8df845ee3e283024b1d6 (patch) | |
tree | 45f81306d304a30be114187b72bdfd3e1be18e6e /vendor/github.com/golang/protobuf/proto/defaults.go | |
parent | 5c092eb0ef9347e88db59618902781e099880196 (diff) | |
download | gitea-82dbb34c9c2d0efa8eeb8df845ee3e283024b1d6.tar.gz gitea-82dbb34c9c2d0efa8eeb8df845ee3e283024b1d6.zip |
Vendor Update: go-gitlab v0.22.1 -> v0.31.0 (#11136)
* vendor update: go-gitlab to v0.31.0
* migrate client init to v0.31.0
* refactor
Diffstat (limited to 'vendor/github.com/golang/protobuf/proto/defaults.go')
-rw-r--r-- | vendor/github.com/golang/protobuf/proto/defaults.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/vendor/github.com/golang/protobuf/proto/defaults.go b/vendor/github.com/golang/protobuf/proto/defaults.go new file mode 100644 index 0000000000..d399bf069c --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/defaults.go @@ -0,0 +1,63 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// SetDefaults sets unpopulated scalar fields to their default values. +// Fields within a oneof are not set even if they have a default value. +// SetDefaults is recursively called upon any populated message fields. +func SetDefaults(m Message) { + if m != nil { + setDefaults(MessageReflect(m)) + } +} + +func setDefaults(m protoreflect.Message) { + fds := m.Descriptor().Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + if !m.Has(fd) { + if fd.HasDefault() && fd.ContainingOneof() == nil { + v := fd.Default() + if fd.Kind() == protoreflect.BytesKind { + v = protoreflect.ValueOf(append([]byte(nil), v.Bytes()...)) // copy the default bytes + } + m.Set(fd, v) + } + continue + } + } + + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + // Handle singular message. + case fd.Cardinality() != protoreflect.Repeated: + if fd.Message() != nil { + setDefaults(m.Get(fd).Message()) + } + // Handle list of messages. + case fd.IsList(): + if fd.Message() != nil { + ls := m.Get(fd).List() + for i := 0; i < ls.Len(); i++ { + setDefaults(ls.Get(i).Message()) + } + } + // Handle map of messages. + case fd.IsMap(): + if fd.MapValue().Message() != nil { + ms := m.Get(fd).Map() + ms.Range(func(_ protoreflect.MapKey, v protoreflect.Value) bool { + setDefaults(v.Message()) + return true + }) + } + } + return true + }) +} |