Skip to content

Commit 8fbdd2a

Browse files
committed
encode: properly encode maps of structs with structs (by value or embedded)
1 parent f60578b commit 8fbdd2a

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

binary.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,20 @@ func (b *Encoder) Encode(v interface{}) (err error) {
108108
}
109109
for _, key := range rv.MapKeys() {
110110
value := rv.MapIndex(key)
111+
if key.CanAddr() {
112+
key = key.Addr()
113+
} else {
114+
k := reflect.New(key.Type()).Elem()
115+
k.Set(key)
116+
key = k.Addr()
117+
}
118+
if value.CanAddr() {
119+
value = value.Addr()
120+
} else {
121+
v := reflect.New(value.Type()).Elem()
122+
v.Set(value)
123+
value = v.Addr()
124+
}
111125
if err = b.Encode(key.Interface()); err != nil {
112126
return err
113127
}

0 commit comments

Comments
 (0)