Trait edn_rs::Deserialize
source · pub trait Deserialize: Sized {
// Required method
fn deserialize(edn: &Edn) -> Result<Self, Error>;
}
Expand description
public trait to be used to Deserialize
structs.
§Errors
Error will be like EdnError::Deserialize("couldn't convert <value> into <type>")
use crate::edn_rs::{Edn, EdnError, Deserialize};
#[derive(Debug, PartialEq)]
struct Person {
name: String,
age: u64,
}
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()
))
);
Required Methods§
fn deserialize(edn: &Edn) -> Result<Self, Error>
Object Safety§
This trait is not object safe.