cloudwego / cloudwego/sonic-rs
`#[serde(flatten)]` breaks deserialization
- Dominant language
- Rust
- Stars
- 920
- Forks
- 68
- Avg merge
- 2h 5m
- Merged PRs (30d)
- 1
Description
**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__
```rust
fn main() {
#[derive(serde::Deserialize)]
struct Repro {
expected_field: i32,
#[serde(flatten)]
others: std::collections::HashMap,
}
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
Contributor guide
Assessment
This issue has not been assessed yet.