It works when all the fields in the enum are String, but failed in other cases.
use serde::Deserialize; // 1.0.104
use serde_urlencoded; // 0.6.1
#[derive(Debug, Deserialize)]
#[serde(untagged)]
enum Q1 {
A { foo: String },
B { bar: String },
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
enum Q2 {
A { foo: String },
B { bar: i32 },
}
fn main() {
let q1 = "bar=123";
let q1s = serde_urlencoded::from_str::<Q1>(q1).unwrap();
println!("q1: {:#?}", q1s);
let q2 = "bar=123";
let q2s = serde_urlencoded::from_str::<Q2>(q2).unwrap();
println!("q2: {:#?}", q2s);
}
playground
It works when all the fields in the enum are String, but failed in other cases.
playground