Trait edn_rs::Deserialize
source · [−]pub trait Deserialize: Sized {
fn deserialize(edn: &Edn) -> Result<Self, Error>;
}
Expand description
public trait to be used to Deserialize
structs
Example:
use crate::edn_rs::{Edn, EdnError, Deserialize};
#[derive(Debug, PartialEq)]
struct Person {
name: String,
age: usize,
}
impl Deserialize for Person {
fn deserialize(edn: &Edn) -> Result<Self, EdnError> {
Ok(Self {
name: edn_rs::from_edn(&edn[":name"])?,
age: edn_rs::from_edn(&edn[":age"])?,
})
}
}
let edn_str = "{:name \"rose\" :age 66 }";
let person: Person = edn_rs::from_str(edn_str).unwrap();
assert_eq!(
person,
Person {
name: "rose".to_string(),
age: 66,
}
);
println!("{:?}", person);
// Person { name: "rose", age: 66 }
let bad_edn_str = "{:name \"rose\" :age \"some text\" }";
let person: Result<Person, EdnError> = edn_rs::from_str(bad_edn_str);
assert_eq!(
person,
Err(EdnError::Deserialize(
"couldn't convert `\"some text\"` into `uint`".to_string()
))
);