serde_urlencoded icon indicating copy to clipboard operation
serde_urlencoded copied to clipboard

Doesn't work with untagged enum

Open hronro opened this issue 4 years ago • 3 comments

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

hronro avatar Mar 06 '20 12:03 hronro

Patches welcome!

nox avatar Mar 06 '20 12:03 nox

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)?

davepacheco avatar Aug 03 '20 23:08 davepacheco

This seems to be caused by serde-rs/serde#1183. It's similar to #33.

davepacheco avatar Aug 04 '20 16:08 davepacheco