sbd 0.3.4

Read and write Iridium Short Burst Data (SBD) messages
Documentation
//! Store SBD messages in memory.
//!
//! Useful primarily for testing.

use crate::{mo::Message, storage, Error};

/// A simple storage backend that saves the messages in memory.
#[derive(Debug, Default)]
pub struct Storage {
    messages: Vec<Message>,
}

impl Storage {
    /// Creates a new memory storage.
    ///
    /// # Examples
    ///
    /// ```
    /// let storage = sbd::storage::MemoryStorage::new();
    /// ```
    pub fn new() -> Storage {
        Storage {
            messages: Vec::new(),
        }
    }
}

impl storage::Storage for Storage {
    fn store(&mut self, message: Message) -> Result<(), Error> {
        self.messages.push(message);
        Ok(())
    }

    fn messages(&self) -> Result<Vec<Message>, Error> {
        Ok(self.messages.clone())
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::{mo::Message, storage::Storage as StorageTrait};

    #[test]
    fn store() {
        let mut storage = Storage::new();
        let message = Message::from_path("data/0-mo.sbd").unwrap();
        storage.store(message.clone()).unwrap();
        let stored_message = &storage.messages().unwrap()[0];
        assert_eq!(&message, stored_message);
    }
}