edjr 0.1.1

Elite Dangerous Journal Reader
Documentation
use {
    crate::{Journal, async_read::AsyncRead, entry::JournalEntry, error::JournalReadError},
    tokio::{
        fs::File,
        io::{AsyncBufReadExt, BufReader},
    },
};

impl AsyncRead for Journal<File> {
    async fn read_all(&mut self) -> Result<Vec<JournalEntry>, JournalReadError> {
        let mut reader = BufReader::new(
            self.file
                .try_clone()
                .await
                .map_err(JournalReadError::ReadError)?,
        );
        let mut buffer = String::new();
        let mut entries = Vec::new();

        loop {
            buffer.clear();
            reader
                .read_line(&mut buffer)
                .await
                .map_err(JournalReadError::ReadError)?;

            if buffer.is_empty() {
                break;
            }

            entries.push(serde_json::from_str(&buffer).map_err(JournalReadError::ParsingError)?);
        }

        Ok(entries)
    }
}