Open
Description
Hello I've encounter following problem,
Having enum like this:
#[derive(Deserialize)]
enum Filter {
EQ { property: String, value: String },
}
I cannot deserialize it using sequence:
#[derive(Deserialize)]
struct Req {
filter: Filter,
}
let req: Req = serde_json::from_value(json!({
"filter": {
"EQ" : ["a", "b"]
}
}).unwrap()
Error:
invalid type: sequence, expected struct variant
However extracting variant body to a struct, works well:
#[derive(Deserialize)]
struct EQ {
property: String, value: String
}
#[derive(Deserialize)]
enum Filter {
EQ(EQ),
}
// this doesn't panic:
let a: Req = serde_json::from_value(json!({
"filter" : {
"EQ": ["a", "b"]
}
}))
.unwrap();
Used crates:
serde = { version = "1.0.130" }
serde_json = {version = "1.0.72" , features = ["preserve_order"]}
Full test for reproduction:
#[test]
fn deserialize_enum() {
#[derive(Deserialize)]
struct EQ {
property: String,
value: String,
}
#[derive(Deserialize)]
enum FilterTuple {
EQ(EQ),
}
#[derive(Deserialize)]
enum FilterStruct {
EQ { property: String, value: String },
}
#[derive(Deserialize)]
struct Req {
filter_tuple: FilterTuple,
filter_struct: FilterStruct,
}
let _: Req = serde_json::from_value(json!({
"filter_tuple" : {
"EQ": {
"property": "a",
"value": "b"
}
},
"filter_struct" : {
"EQ": {
"property": "a",
"value": "b"
}
}
}))
.unwrap();
let _: Req = serde_json::from_value(json!({
"filter_tuple" : {
"EQ": ["a", "b"]
},
"filter_struct" : {
"EQ": ["a", "b"]
}
}))
.unwrap();
}
Metadata
Metadata
Assignees
Labels
No labels