MCPcopy
hub / github.com/golang/protobuf / SetExtension

Function SetExtension

proto/extensions.go:223–249  ·  proto/extensions.go::SetExtension

SetExtension sets an extension field in m to the provided value.

(m Message, xt *ExtensionDesc, v interface{})

Source from the content-addressed store, hash-verified

221
222// SetExtension sets an extension field in m to the provided value.
223func SetExtension(m Message, xt *ExtensionDesc, v interface{}) error {
224 mr := MessageReflect(m)
225 if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 {
226 return errNotExtendable
227 }
228
229 rv := reflect.ValueOf(v)
230 if reflect.TypeOf(v) != reflect.TypeOf(xt.ExtensionType) {
231 return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", v, xt.ExtensionType)
232 }
233 if rv.Kind() == reflect.Ptr {
234 if rv.IsNil() {
235 return fmt.Errorf("proto: SetExtension called with nil value of type %T", v)
236 }
237 if isScalarKind(rv.Elem().Kind()) {
238 v = rv.Elem().Interface()
239 }
240 }
241
242 xtd := xt.TypeDescriptor()
243 if !isValidExtension(mr.Descriptor(), xtd) {
244 return fmt.Errorf("proto: bad extended type; %T does not extend %T", xt.ExtendedType, m)
245 }
246 mr.Set(xtd, xt.ValueOf(v))
247 clearUnknown(mr, fieldNum(xt.Field))
248 return nil
249}
250
251// SetRawExtension inserts b into the unknown fields of m.
252//

Calls 8

MessageReflectFunction · 0.85
isScalarKindFunction · 0.85
isValidExtensionFunction · 0.85
clearUnknownFunction · 0.85
fieldNumTypeAlias · 0.85
InterfaceMethod · 0.80
DescriptorMethod · 0.65
LenMethod · 0.45