RosettaCodeData/Task/Object-serialization/Rust/object-serialization-2.rust

49 lines
1.1 KiB
Plaintext

use std::fmt;
use bincode::{deserialize, serialize};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
enum Animal {
Dog { name: String, color: String },
Bird { name: String, wingspan: u8 },
}
impl fmt::Display for Animal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Animal::Dog { name, color } => write!(f, "{} is a dog with {} fur", name, color),
Animal::Bird { name, wingspan } => {
write!(f, "{} is a bird with a wingspan of {}", name, wingspan)
}
}
}
}
fn main() -> bincode::Result<()> {
let animals = vec![
Animal::Dog {
name: "Rover".into(),
color: "brown".into(),
},
Animal::Bird {
name: "Tweety".into(),
wingspan: 3,
},
];
for animal in &animals {
println!("{}", animal);
}
let serialized = serialize(&animals)?;
println!("Serialized into {} bytes", serialized.len());
let deserialized: Vec<Animal> = deserialize(&serialized)?;
println!("{:#?}", deserialized);
Ok(())
}