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
use error::*; use serialization::DynamicEventMapperSerde; use std::collections::HashMap; pub struct DynamicEventMapper { dynamic_event_map: Vec<Option<HashMap<String, usize>>>, } impl DynamicEventMapper { pub fn new( dynamic_event_map: Vec<Option<HashMap<String, usize>>>, ) -> Self { DynamicEventMapper { dynamic_event_map: dynamic_event_map, } } pub fn get_id<TStr>(&self, module_id: usize, dynamic_event_name: TStr) -> Result<usize> where TStr: AsRef<str> { let dynamic_event_name = dynamic_event_name.as_ref(); match self.dynamic_event_map.get(module_id) { Some(&Some(ref some)) => { match some.get(dynamic_event_name) { Some(some) => Ok(some.clone()), None => Err(ErrorKind::DynamicEventNotFoundInMap(module_id, dynamic_event_name.to_string()).into()) } }, None | Some(&None) => Err(ErrorKind::DynamicEventNotFoundInMap(module_id, dynamic_event_name.to_string()).into()), } } pub fn get_raw_map(&self) -> &Vec<Option<HashMap<String, usize>>> { &self.dynamic_event_map } pub fn make_serde(&self) -> DynamicEventMapperSerde { DynamicEventMapperSerde::new(&self.dynamic_event_map) } }