|
|
@@ -161,22 +161,31 @@ func RegisterExtension(extension Extension) {
|
|
|
extensions = append(extensions, extension)
|
|
|
}
|
|
|
|
|
|
-func getTypeDecoderFromExtension(typ reflect.Type) ValDecoder {
|
|
|
- decoder := _getTypeDecoderFromExtension(typ)
|
|
|
+func getTypeDecoderFromExtension(cfg *frozenConfig, typ reflect.Type) ValDecoder {
|
|
|
+ decoder := _getTypeDecoderFromExtension(cfg, typ)
|
|
|
if decoder != nil {
|
|
|
for _, extension := range extensions {
|
|
|
decoder = extension.DecorateDecoder(typ, decoder)
|
|
|
}
|
|
|
+ for _, extension := range cfg.extensions {
|
|
|
+ decoder = extension.DecorateDecoder(typ, decoder)
|
|
|
+ }
|
|
|
}
|
|
|
return decoder
|
|
|
}
|
|
|
-func _getTypeDecoderFromExtension(typ reflect.Type) ValDecoder {
|
|
|
+func _getTypeDecoderFromExtension(cfg *frozenConfig, typ reflect.Type) ValDecoder {
|
|
|
for _, extension := range extensions {
|
|
|
decoder := extension.CreateDecoder(typ)
|
|
|
if decoder != nil {
|
|
|
return decoder
|
|
|
}
|
|
|
}
|
|
|
+ for _, extension := range cfg.extensions {
|
|
|
+ decoder := extension.CreateDecoder(typ)
|
|
|
+ if decoder != nil {
|
|
|
+ return decoder
|
|
|
+ }
|
|
|
+ }
|
|
|
typeName := typ.String()
|
|
|
decoder := typeDecoders[typeName]
|
|
|
if decoder != nil {
|
|
|
@@ -191,23 +200,32 @@ func _getTypeDecoderFromExtension(typ reflect.Type) ValDecoder {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func getTypeEncoderFromExtension(typ reflect.Type) ValEncoder {
|
|
|
- encoder := _getTypeEncoderFromExtension(typ)
|
|
|
+func getTypeEncoderFromExtension(cfg *frozenConfig, typ reflect.Type) ValEncoder {
|
|
|
+ encoder := _getTypeEncoderFromExtension(cfg, typ)
|
|
|
if encoder != nil {
|
|
|
for _, extension := range extensions {
|
|
|
encoder = extension.DecorateEncoder(typ, encoder)
|
|
|
}
|
|
|
+ for _, extension := range cfg.extensions {
|
|
|
+ encoder = extension.DecorateEncoder(typ, encoder)
|
|
|
+ }
|
|
|
}
|
|
|
return encoder
|
|
|
}
|
|
|
|
|
|
-func _getTypeEncoderFromExtension(typ reflect.Type) ValEncoder {
|
|
|
+func _getTypeEncoderFromExtension(cfg *frozenConfig, typ reflect.Type) ValEncoder {
|
|
|
for _, extension := range extensions {
|
|
|
encoder := extension.CreateEncoder(typ)
|
|
|
if encoder != nil {
|
|
|
return encoder
|
|
|
}
|
|
|
}
|
|
|
+ for _, extension := range cfg.extensions {
|
|
|
+ encoder := extension.CreateEncoder(typ)
|
|
|
+ if encoder != nil {
|
|
|
+ return encoder
|
|
|
+ }
|
|
|
+ }
|
|
|
typeName := typ.String()
|
|
|
encoder := typeEncoders[typeName]
|
|
|
if encoder != nil {
|
|
|
@@ -324,6 +342,9 @@ func createStructDescriptor(cfg *frozenConfig, typ reflect.Type, bindings []*Bin
|
|
|
for _, extension := range extensions {
|
|
|
extension.UpdateStructDescriptor(structDescriptor)
|
|
|
}
|
|
|
+ for _, extension := range cfg.extensions {
|
|
|
+ extension.UpdateStructDescriptor(structDescriptor)
|
|
|
+ }
|
|
|
processTags(structDescriptor, cfg)
|
|
|
// merge normal & embedded bindings & sort with original order
|
|
|
allBindings := sortableBindings(append(embeddedBindings, structDescriptor.Fields...))
|