1
0
Fork 0
mirror of https://github.com/sourcegraph/jsonrpc2.git synced 2026-06-16 04:04:56 +02:00

Homogenize treatment of params and meta in UnmarshalJSON (#52)

This change makes the treatment of params and meta the same, by
assigning a well-known pointer at first to detect if the unmarshaling
process overwrites it with an explicit nil, or it stays the same in
which it means that it was unset from the beginning.
This commit is contained in:
lhchavez 2021-08-04 09:55:02 -07:00 committed by GitHub
parent 120d461fd1
commit 5f298fe6a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -85,10 +85,12 @@ func (r Request) MarshalJSON() ([]byte, error) {
func (r *Request) UnmarshalJSON(data []byte) error {
r2 := make(map[string]interface{})
// Detect if the "params" field is JSON "null" or just not present
// by seeing if the field gets overwritten to nil.
// Detect if the "params" or "meta" fields are JSON "null" or just not
// present by seeing if the field gets overwritten to nil.
emptyParams := &json.RawMessage{}
r2["params"] = emptyParams
emptyMeta := &json.RawMessage{}
r2["meta"] = emptyMeta
decoder := json.NewDecoder(bytes.NewReader(data))
decoder.UseNumber()
@ -112,9 +114,13 @@ func (r *Request) UnmarshalJSON(data []byte) error {
}
r.Params = (*json.RawMessage)(&b)
}
meta, ok := r2["meta"]
if ok {
b, err := json.Marshal(meta)
switch {
case r2["meta"] == nil:
r.Meta = &jsonNull
case r2["meta"] == emptyMeta:
r.Meta = nil
default:
b, err := json.Marshal(r2["meta"])
if err != nil {
return fmt.Errorf("failed to marshal Meta: %w", err)
}