1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use std::collections::HashMap; use std::convert::{TryFrom, TryInto}; use std::hash::Hash; use crate::bolt::value::Map; use crate::error::*; use crate::Value; impl<K, V> TryInto<HashMap<K, V>> for Map where K: Hash + Eq + TryFrom<Value, Error = Error>, V: TryFrom<Value, Error = Error>, { type Error = Error; fn try_into(self) -> Result<HashMap<K, V>> { let mut map = HashMap::with_capacity(self.value.len()); for (k, v) in self.value { map.insert(K::try_from(k)?, V::try_from(v)?); } Ok(map) } } impl<K, V> TryInto<HashMap<K, V>> for Value where K: Hash + Eq + TryFrom<Value, Error = Error>, V: TryFrom<Value, Error = Error>, { type Error = Error; fn try_into(self) -> Result<HashMap<K, V>> { match self { Value::Map(map) => Ok(map.try_into()?), _ => Err(ValueError::InvalidConversion(self).into()), } } } impl<K> TryInto<HashMap<K, Value>> for Map where K: Hash + Eq + TryFrom<Value, Error = Error>, { type Error = Error; fn try_into(self) -> Result<HashMap<K, Value>> { let mut map = HashMap::with_capacity(self.value.len()); for (k, v) in self.value { map.insert(K::try_from(k)?, v); } Ok(map) } } impl<K> TryInto<HashMap<K, Value>> for Value where K: Hash + Eq + TryFrom<Value, Error = Error>, { type Error = Error; fn try_into(self) -> Result<HashMap<K, Value>> { match self { Value::Map(map) => Ok(map.try_into()?), _ => Err(ValueError::InvalidConversion(self).into()), } } }