Function edn_rs::from_str[][src]

pub fn from_str<T: Deserialize>(s: &str) -> Result<T, Error>
Expand description

from_str deserializes an EDN String into type T that implements Deserialize. Response is Result<T, EdnError>

use edn_rs::{Deserialize, Edn, EdnError};

#[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();

println!("{:?}", person);
// Person { name: "rose", age: 66 }

assert_eq!(
    person,
    Person {
        name: "rose".to_string(),
        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()
    ))
);