I'm trying to add my own domain invariant to serde_json's logic for deserializing arbitrary JSON values. The invariant is that if it is a Map, the key cannot be an empty string.
Here's what I have so far: Rust Playground
However, the current error returned by serde_json::from_str()
just says "data did not match any variant of untagged enum Value". I understand why that is the case; untagged just means serde_json will try each variant, so I don't think it could correctly produce more specific errors than this.
That being said, is there any way to accomplish what I want without rewriting all of the implementation logic of serde_json::Value
from scratch? I want any deserialization errors to include "Must not be empty" as well as (ideally) the location of the empty key in the JSON object (maybe a JSON path).