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
use std::collections::HashMap; use neovim_lib::Value; pub trait ValueMapExt { fn to_attrs_map(&self) -> Result<HashMap<&str, &Value>, String>; fn to_attrs_map_report(&self) -> Option<HashMap<&str, &Value>>; } impl ValueMapExt for Vec<(Value, Value)> { fn to_attrs_map(&self) -> Result<HashMap<&str, &Value>, String> { self.iter() .map(|p| { p.0 .as_str() .ok_or_else(|| "Can't convert map key to string".to_owned()) .map(|key| (key, &p.1)) }) .collect::<Result<HashMap<&str, &Value>, String>>() } fn to_attrs_map_report(&self) -> Option<HashMap<&str, &Value>> { match self.to_attrs_map() { Err(e) => { error!("{}", e); None } Ok(m) => Some(m), } } }