Skip to content

Instantly share code, notes, and snippets.

@jld
Last active August 7, 2017 03:55
Show Gist options
  • Select an option

  • Save jld/f61ad8066e91c001a7d08d8896cd1580 to your computer and use it in GitHub Desktop.

Select an option

Save jld/f61ad8066e91c001a7d08d8896cd1580 to your computer and use it in GitHub Desktop.
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
enum Chicken {
Chicken { chicken: HashMap<usize,usize> }
}
#[derive(Debug, Serialize, Deserialize)]
struct Chicken2 {
chicken: HashMap<usize,usize>
}
fn main() {
let ch = Chicken::Chicken { chicken: [(12,23)].iter().cloned().collect() };
let ch2 = Chicken2 { chicken: [(12,23)].iter().cloned().collect() };
let s = serde_json::to_string(&ch).unwrap();
let s2 = serde_json::to_string(&ch2).unwrap();
assert_eq!(s, s2); // This succeeds.
let cx2: Chicken2 = serde_json::from_str(&s2).unwrap(); // This also succeeds.
println!("{:?} => {} => {:?}", ch2, s2, cx2);
println!("{:?} => {}", ch, s);
let cx: Chicken = serde_json::from_str(&s).unwrap(); // This panics.
println!("{:?} => {} => {:?}", ch, s, cx);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment