From 2f0c4c4653411588a20d6562cd187478cb90498c Mon Sep 17 00:00:00 2001 From: Georgy Moiseev Date: Fri, 6 Oct 2023 13:55:51 +0300 Subject: [PATCH] doc: clarify crud error process decoding It is a bit confusing for non-experienced vmihailenco/msgpack users than `nil` values are actually parsed by `DecodeMapLen`, `DecodeUint64` and `DecodeBool` methods to some default value. So I decided to leave a note here. --- crud/result.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crud/result.go b/crud/result.go index d08c7c41e..3feab7aed 100644 --- a/crud/result.go +++ b/crud/result.go @@ -81,6 +81,9 @@ func (r *Result) DecodeMsgpack(d *msgpack.Decoder) error { return fmt.Errorf("array len doesn't match: %d", arrLen) } + // DecodeMapLen processes `nil` as zero length map, + // so in `return nil, err` case we don't miss error info. + // https://github.com/vmihailenco/msgpack/blob/3f7bd806fea698e7a9fe80979aa3512dea0a7368/decode_map.go#L79-L81 l, err := d.DecodeMapLen() if err != nil { return err @@ -181,6 +184,9 @@ func (r *NumberResult) DecodeMsgpack(d *msgpack.Decoder) error { return fmt.Errorf("array len doesn't match: %d", arrLen) } + // DecodeUint64 processes `nil` as `0`, + // so in `return nil, err` case we don't miss error info. + // https://github.com/vmihailenco/msgpack/blob/3f7bd806fea698e7a9fe80979aa3512dea0a7368/decode_number.go#L91-L93 if r.Value, err = d.DecodeUint64(); err != nil { return err } @@ -218,6 +224,9 @@ func (r *BoolResult) DecodeMsgpack(d *msgpack.Decoder) error { return err } if arrLen < 2 { + // DecodeBool processes `nil` as `false`, + // so in `return nil, err` case we don't miss error info. + // https://github.com/vmihailenco/msgpack/blob/3f7bd806fea698e7a9fe80979aa3512dea0a7368/decode.go#L367-L369 if r.Value, err = d.DecodeBool(); err != nil { return err }