naomijub / edn-rs

[DEPRECATED]: Crate to parse and emit EDN
https://crates.io/crates/edn-rs
MIT License
81 stars 14 forks source link

Make deserialization for std::collections safe #68

Closed naomijub closed 3 years ago

naomijub commented 3 years ago

Currently we are using unwrap at map(|e| Deserialize::deserialize(e).unwrap())

impl<T: std::cmp::Eq + std::hash::Hash> Deserialize for HashSet<T>
where
    T: Deserialize,
{
    fn deserialize(edn: &Edn) -> Result<Self, Error> {
        match edn {
            Edn::Set(_) => Ok(edn
                .set_iter()
                .ok_or_else(|| Error::Iter(format!("Could not create iter from {:?}", edn)))?
                .map(|e| Deserialize::deserialize(e).unwrap())
                .fold(HashSet::new(), |mut acc, e| {
                    acc.insert(e);
                    acc
                })),
            _ => Err(build_deserialize_error(
                &edn,
                std::any::type_name::<HashSet<T>>(),
            )),
        }
    }
}
naomijub commented 3 years ago

https://github.com/naomijub/edn-rs/issues/58

naomijub commented 3 years ago

Thanks @otaviopace https://github.com/naomijub/edn-rs/pull/74