Skip to content

Commit d0a8e94

Browse files
author
Ben Hubbard
committed
Adds StructDecodedHook
1 parent dc97f09 commit d0a8e94

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

reflect_extension.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type Binding struct {
4747
// Can also rename fields by UpdateStructDescriptor.
4848
type Extension interface {
4949
UpdateStructDescriptor(structDescriptor *StructDescriptor)
50+
StructDecodedHook(ptr unsafe.Pointer, typ reflect2.Type)
5051
StructFieldDecodedHook(field string, ptr unsafe.Pointer, typ reflect2.Type)
5152
CreateMapKeyDecoder(typ reflect2.Type) ValDecoder
5253
CreateMapKeyEncoder(typ reflect2.Type) ValEncoder
@@ -64,6 +65,10 @@ type DummyExtension struct {
6465
func (extension *DummyExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
6566
}
6667

68+
// StructDecodedHook No-op
69+
func (extension *DummyExtension) StructDecodedHook(ptr unsafe.Pointer, typ reflect2.Type) {
70+
}
71+
6772
// StructFieldDecodedHook No-op
6873
func (extension *DummyExtension) StructFieldDecodedHook(field string, ptr unsafe.Pointer, typ reflect2.Type) {
6974
}
@@ -104,6 +109,10 @@ type EncoderExtension map[reflect2.Type]ValEncoder
104109
func (extension EncoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
105110
}
106111

112+
// StructDecodedHook No-op
113+
func (extension EncoderExtension) StructDecodedHook(ptr unsafe.Pointer, typ reflect2.Type) {
114+
}
115+
107116
// StructFieldDecodedHook No-op
108117
func (extension EncoderExtension) StructFieldDecodedHook(field string, ptr unsafe.Pointer, typ reflect2.Type) {
109118
}
@@ -144,6 +153,10 @@ type DecoderExtension map[reflect2.Type]ValDecoder
144153
func (extension DecoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
145154
}
146155

156+
// StructDecodedHook No-op
157+
func (extension DecoderExtension) StructDecodedHook(ptr unsafe.Pointer, typ reflect2.Type) {
158+
}
159+
147160
// StructFieldDecodedHook No-op
148161
func (extension DecoderExtension) StructFieldDecodedHook(field string, ptr unsafe.Pointer, typ reflect2.Type) {
149162
}

reflect_struct_decoder.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ type generalStructDecoder struct {
6262
}
6363

6464
func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
65+
for _, extension := range extensions {
66+
extension.StructDecodedHook(ptr, decoder.typ)
67+
}
68+
for _, extension := range iter.cfg.extraExtensions {
69+
extension.StructDecodedHook(ptr, decoder.typ)
70+
}
6571
if !iter.readObjectStart() {
6672
return
6773
}
@@ -125,6 +131,12 @@ type skipObjectDecoder struct {
125131
}
126132

127133
func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
134+
for _, extension := range extensions {
135+
extension.StructDecodedHook(ptr, decoder.typ)
136+
}
137+
for _, extension := range iter.cfg.extraExtensions {
138+
extension.StructDecodedHook(ptr, decoder.typ)
139+
}
128140
valueType := iter.WhatIsNext()
129141
if valueType != ObjectValue && valueType != NilValue {
130142
iter.ReportError("skipObjectDecoder", "expect object or null")

0 commit comments

Comments
 (0)