callum-oakley / json5-rs

A Rust JSON5 serializer and deserializer which speaks Serde.
ISC License
184 stars 23 forks source link

from_str panic on incorrect tuple variant #16

Closed pheki closed 4 years ago

pheki commented 4 years ago

from_str panics when trying to use tuple variant as a unit variant, eg.:

use serde::Deserialize;

#[derive(Deserialize, Debug)]
enum MyEnum {
    MyEmptyTupleVariant(),
}

#[derive(Deserialize, Debug)]
struct MyStruct {
    enum_field: MyEnum,
}

fn main() {
    deserialize_right();
    deserialize_wrong();
}

fn deserialize_right() {
    let string = r#"{"enum_field": {"MyEmptyTupleVariant": []}}"#;
    let value: MyStruct = json5::from_str(string).expect("deserialization error");
    println!("deserialize_right: {:?}", value);
}

fn deserialize_wrong() {
    let string = r#"{"enum_field": "MyEmptyTupleVariant"}"#;
    let value: MyStruct = json5::from_str(string).expect("deserialization error");
    println!("deserialize_wrong: {:?}", value);
}

Will output:

deserialize_right: MyStruct { enum_field: MyEmptyTupleVariant }
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21

The panic happens at src/de.rs:387

For reference, serde_json will output:

deserialize_right: MyStruct { enum_field: MyEmptyTupleVariant }
thread 'main' panicked at 'deserialization error: Error("invalid type: unit variant, expected tuple variant", line: 1, column: 37)', src/libcore/result.rs:1165:5