cloudwego / cloudwego/sonic-rs

`#[serde(flatten)]` breaks deserialization

Open
#114 6 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.