Closed
Description
It would be helpful to have a type similar to Go's json.RawMessage
that is not tokenized during deserialization, but rather its raw contents stored as a Vec<u8>
or &'de [u8]
.
The following pseudo-code demonstrates the idea.
#[derive(Deserialize)]
struct Struct {
/// Deserialized normally.
core_data: Vec<i32>,
/// Contents of `user_data` are copied / borrowed directly from the input
/// with no modification.
///
/// `RawValue<'static>` is akin to `Vec<u8>`.
/// `RawValue<'a>` is akin to `&'a [u8]`.
user_data: serde_json::RawValue<'static>,
}
fn main() {
let json = r#"
{
"core_data": [1, 2, 3],
"user_data": { "foo": {}, "bar": 123, "baz": "abc" }
}
"#;
let s: Struct = serde_json::from_bytes(&json).unwrap();
println!("{}", s.user_data); // "{ \"foo\": {}, \"bar\": 123, \"baz\": \"abc\" }"
}
The main advantage of this is would be to have 'lazily-deserialized' values.