I expected #[serde(flatten)] does not change the behaviour of internal struct, but it changes.
#[derive(Deserialize, Serialize, PartialEq, Debug)]
struct Paginate {
limit: u64,
offset: u64,
}
#[derive(Deserialize, Serialize, PartialEq, Debug)]
struct Query {
#[serde(flatten)]
paginate: Paginate
}
fn main() {
let query = "limit=10&offset=0";
println!("{:?}", from_str::<Paginate>(query));
// -> Ok(Paginate { limit: 10, offset: 0 })
println!("{:?}", from_str::<Query>(query));
// -> Err(Error { err: "invalid type: string \"10\", expected u64" })
println!("{:?}", to_string(Paginate {limit: 10, offset:0}));
// Ok("limit=10&offset=0")
println!("{:?}", to_string(Query {paginate: Paginate {limit: 10, offset:0}}));
// Ok("limit=10&offset=0")
}
I think this is a bug.
I expected
#[serde(flatten)]does not change the behaviour of internal struct, but it changes.I think this is a bug.