serde_urlencoded
serde_urlencoded copied to clipboard
Doesn't work with untagged enum
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);
}
Patches welcome!
By chance, has anybody taken a look at why this doesn't work (e.g., is it somehow behaving correctly vs minor bug vs deeper design issue)?
This seems to be caused by serde-rs/serde#1183. It's similar to #33.