Home | History | Annotate | Download | only in proto

Lines Matching refs:extension

46 // ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.
47 var ErrMissingExtension = errors.New("proto: missing extension")
60 extensionsWrite() map[int32]Extension
61 extensionsRead() (map[int32]Extension, sync.Locker)
69 ExtensionMap() map[int32]Extension
77 func (e extensionAdapter) extensionsWrite() map[int32]Extension {
81 func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
92 // If the proto message has the old extension format, it returns a wrapper that implements
121 extensionMap map[int32]Extension
125 // extensionsWrite returns the extension map, creating it on first use.
126 func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
130 extensionMap map[int32]Extension
132 e.p.extensionMap = make(map[int32]Extension)
139 func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {
149 // ExtensionDesc represents an extension specification.
153 ExtensionType interface{} // nil pointer to the extension type
155 Name string // fully-qualified name of extension, for text formatting
157 Filename string // name of the file in which the extension is defined
165 // Extension represents an extension in a message.
166 type Extension struct {
167 // When an extension is stored in a message using SetExtension
172 // extension will have only enc set. When such an extension is
187 extmap[id] = Extension{enc: b}
190 // isExtensionField returns true iff the given field number is in an extension range.
200 // checkExtensionTypes checks that the given extension is valid for pb.
201 func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
207 if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
211 if !isExtensionField(pb, extension.Field) {
212 return errors.New("proto: bad extension number; not in declared ranges")
217 // extPropKey is sufficient to uniquely identify an extension.
265 func encodeExtensionsMap(m map[int32]Extension) error {
268 // Extension is only in its encoded form.
273 // because the extension value may have been mutated after
303 func extensionsMapSize(m map[int32]Extension) (n int) {
306 // Extension is only in its encoded form.
312 // because the extension value may have been mutated after
327 // HasExtension returns whether the given extension is present in pb.
328 func HasExtension(pb Message, extension *ExtensionDesc) bool {
339 _, ok = extmap[extension.Field]
344 // ClearExtension removes the given extension from pb.
345 func ClearExtension(pb Message, extension *ExtensionDesc) {
352 delete(extmap, extension.Field)
355 // GetExtension parses and returns the given extension of pb.
356 // If the extension is not present and has no default value it returns ErrMissingExtension.
357 func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
363 if err := checkExtensionTypes(epb, extension); err != nil {
369 return defaultExtensionValue(extension)
373 e, ok := emap[extension.Field]
377 return defaultExtensionValue(extension)
382 if e.desc != extension {
391 v, err := decodeExtension(e.enc, extension)
399 e.desc = extension
401 emap[extension.Field] = e
405 // defaultExtensionValue returns the default value for extension.
406 // If no default for an extension is defined ErrMissingExtension is returned.
407 func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
408 t := reflect.TypeOf(extension.ExtensionType)
409 props := extensionProperties(extension)
440 // decodeExtension decodes an extension encoded in b.
441 func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
444 t := reflect.TypeOf(extension.ExtensionType)
446 props := extensionProperties(extension)
493 // ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.
495 // just the Field field, which defines the extension's field number.
524 // SetExtension sets the specified extension of pb to the specified value.
525 func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
530 if err := checkExtensionTypes(epb, extension); err != nil {
533 extension.ExtensionType)
535 return errors.New("proto: bad extension value type")
537 // nil extension values need to be caught early, because the
538 // encoder can't distinguish an ErrNil due to a nil extension
547 extmap[extension.Field] = Extension{desc: extension, value: value}
577 panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field)))
583 // protocol buffer struct, indexed by the extension number.