sonic-rs
sonic-rs copied to clipboard
`#[serde(flatten)]` breaks deserialization
Describe the bug
If a struct contains a field annotated with #[serde(flatten)]
, it cannot be deserialized by sonic.
To Reproduce
Cargo.toml
[package]
name = "repro"
version = "0.1.0"
edition = "2021"
[dependencies]
sonic-rs = "0.3.13"
serde = { version = "1.0", features = ["derive"] }
main.rs
fn main() {
#[derive(serde::Deserialize)]
struct Repro {
expected_field: i32,
#[serde(flatten)]
others: std::collections::HashMap<String, sonic_rs::Value>,
}
let json = r#"
{
"expected_field": 1,
"unexpected_field": 2
}
"#;
let _repro: Repro = sonic_rs::from_str(json).unwrap();
}
Expected behavior
Deserialization to succeed and for others
to contain the "unexpected_field
".
Actual behavior
thread 'main' panicked at src/main.rs:16:50:
called Result::unwrap()
on an Err
value: invalid type: newtype struct, expected a valid json at line 5 column 4
sonic-rs version:
latest (0.3.13)
Environment:
macos