diff --git a/decoder.go b/decoder.go index ebf01c3..87153c1 100644 --- a/decoder.go +++ b/decoder.go @@ -549,7 +549,6 @@ func (d *decoder) decodeMap( var key []byte var err error key, offset, err = d.decodeKey(offset) - if err != nil { return 0, err } @@ -580,8 +579,14 @@ func (d *decoder) decodeMapToDeserializer( return 0, err } for i := uint(0); i < size; i++ { - // TODO - implement key/value skipping? - offset, err = d.decodeToDeserializer(offset, dser, depth) + var key []byte + + key, offset, err = d.decodeKey(offset) + if err != nil { + return 0, err + } + + err = dser.Key(key) if err != nil { return 0, err } diff --git a/deserializer.go b/deserializer.go index c6dd68d..fd01dba 100644 --- a/deserializer.go +++ b/deserializer.go @@ -17,6 +17,7 @@ type deserializer interface { ShouldSkip(offset uintptr) (bool, error) StartSlice(size uint) error StartMap(size uint) error + Key([]byte) error End() error String(string) error Float64(float64) error