@@ -246,7 +246,8 @@ func getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder {
246246 for _ , extension := range extensions {
247247 decoder = extension .DecorateDecoder (typ , decoder )
248248 }
249- for _ , extension := range ctx .extensions {
249+ decoder = ctx .decoderExtension .DecorateDecoder (typ , decoder )
250+ for _ , extension := range ctx .extraExtensions {
250251 decoder = extension .DecorateDecoder (typ , decoder )
251252 }
252253 }
@@ -259,14 +260,18 @@ func _getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder {
259260 return decoder
260261 }
261262 }
262- for _ , extension := range ctx .extensions {
263+ decoder := ctx .decoderExtension .CreateDecoder (typ )
264+ if decoder != nil {
265+ return decoder
266+ }
267+ for _ , extension := range ctx .extraExtensions {
263268 decoder := extension .CreateDecoder (typ )
264269 if decoder != nil {
265270 return decoder
266271 }
267272 }
268273 typeName := typ .String ()
269- decoder : = typeDecoders [typeName ]
274+ decoder = typeDecoders [typeName ]
270275 if decoder != nil {
271276 return decoder
272277 }
@@ -286,7 +291,8 @@ func getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder {
286291 for _ , extension := range extensions {
287292 encoder = extension .DecorateEncoder (typ , encoder )
288293 }
289- for _ , extension := range ctx .extensions {
294+ encoder = ctx .encoderExtension .DecorateEncoder (typ , encoder )
295+ for _ , extension := range ctx .extraExtensions {
290296 encoder = extension .DecorateEncoder (typ , encoder )
291297 }
292298 }
@@ -300,14 +306,18 @@ func _getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder {
300306 return encoder
301307 }
302308 }
303- for _ , extension := range ctx .extensions {
309+ encoder := ctx .encoderExtension .CreateEncoder (typ )
310+ if encoder != nil {
311+ return encoder
312+ }
313+ for _ , extension := range ctx .extraExtensions {
304314 encoder := extension .CreateEncoder (typ )
305315 if encoder != nil {
306316 return encoder
307317 }
308318 }
309319 typeName := typ .String ()
310- encoder : = typeEncoders [typeName ]
320+ encoder = typeEncoders [typeName ]
311321 if encoder != nil {
312322 return encoder
313323 }
@@ -393,7 +403,9 @@ func createStructDescriptor(ctx *ctx, typ reflect2.Type, bindings []*Binding, em
393403 for _ , extension := range extensions {
394404 extension .UpdateStructDescriptor (structDescriptor )
395405 }
396- for _ , extension := range ctx .extensions {
406+ ctx .encoderExtension .UpdateStructDescriptor (structDescriptor )
407+ ctx .decoderExtension .UpdateStructDescriptor (structDescriptor )
408+ for _ , extension := range ctx .extraExtensions {
397409 extension .UpdateStructDescriptor (structDescriptor )
398410 }
399411 processTags (structDescriptor , ctx .frozenConfig )
0 commit comments