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
use error::*; use event::Event; use std::collections::HashMap; pub struct EventMapper { event_map: Vec<Option<HashMap<String, usize>>>, event_list: Vec<Event>, } impl EventMapper { pub fn new( event_map: Vec<Option<HashMap<String, usize>>>, event_list: Vec<Event>, ) -> Self { EventMapper { event_map: event_map, event_list: event_list, } } pub fn get(&self, event_id: usize) -> Result<&Event> { match self.event_list.get(event_id) { Some(some) => Ok(some), None => Err(ErrorKind::EventNotFoundInList(event_id, self.event_list.len()).into()) } } pub fn get_id<TStr>(&self, module_id: usize, event_name: TStr) -> Result<usize> where TStr: AsRef<str> { let event_name = event_name.as_ref(); match self.event_map.get(module_id) { Some(&Some(ref some)) => { match some.get(event_name) { Some(some) => Ok(some.clone()), None => Err(ErrorKind::EventNotFoundInMap(module_id, event_name.to_string()).into()) } }, None | Some(&None) => Err(ErrorKind::EventNotFoundInMap(module_id, event_name.to_string()).into()) } } pub fn get_raw_list(&self) -> &Vec<Event> { &self.event_list } pub fn get_raw_map(&self) -> &Vec<Option<HashMap<String, usize>>> { &self.event_map } }