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
//! Squirrel away SBD messages and retrieve them later. mod filesystem; mod memory; pub use self::filesystem::Storage as FilesystemStorage; pub use self::memory::Storage as MemoryStorage; use Result; use mo::Message; /// Basic storage operations. pub trait Storage { /// Stores a message, consuming it. /// /// # Examples /// /// ``` /// # use sbd::mo::Message; /// # use sbd::storage::{Storage, MemoryStorage}; /// let message = Message::from_path("data/0-mo.sbd").unwrap(); /// let mut storage = MemoryStorage::new(); /// storage.store(message); /// ``` fn store(&mut self, message: Message) -> Result<()>; /// Retrieves all messages in this storage as a vector. /// /// # Examples /// /// ``` /// # use sbd::mo::Message; /// # use sbd::storage::{Storage, MemoryStorage}; /// let message = Message::from_path("data/0-mo.sbd").unwrap(); /// let mut storage = MemoryStorage::new(); /// storage.store(message.clone()); /// let messages = storage.messages().unwrap(); /// assert_eq!(vec![message], messages); /// ``` fn messages(&self) -> Result<Vec<Message>>; /// Retrieves all messages for a given IMEI. /// /// The default implementation just filters the vector provided by `messages`, but some /// implementors could be more intelligent. /// /// # Examples /// /// ``` /// # use sbd::mo::Message; /// # use sbd::storage::{Storage, MemoryStorage}; /// let message = Message::from_path("data/0-mo.sbd").unwrap(); /// let mut storage = MemoryStorage::new(); /// storage.store(message.clone()); /// let messages = storage.messages_from_imei("300234063904190").unwrap(); /// assert_eq!(vec![message], messages); /// let messages = storage.messages_from_imei("300234063904191").unwrap(); /// assert!(messages.is_empty()); /// ``` fn messages_from_imei(&self, imei: &str) -> Result<Vec<Message>> { self.messages().map(|mut v| { v.retain(|m| m.imei() == imei); v }) } }