ed-journals 0.4.0

Provides models for representing and parsing elite dangerous journal files
Documentation
use serde::Serialize;

use crate::logs::scan_organic_event::{ScanOrganicEvent, ScanOrganicEventScanType};

#[derive(Debug, Serialize)]
pub struct OrganicState {
    pub events: Vec<Option<ScanOrganicEvent>>,
}

impl Default for OrganicState {
    fn default() -> Self {
        Self::new()
    }
}

impl OrganicState {
    pub fn new() -> Self {
        OrganicState { events: Vec::new() }
    }

    pub fn push_event(&mut self, event: &ScanOrganicEvent) {
        self.events.push(Some(event.clone()));
    }

    pub fn clear_process(&mut self) {
        if self.get_progress().is_some() {
            self.events.push(None);
        }
    }

    pub fn get_progress(&self) -> Option<&ScanOrganicEventScanType> {
        Some(&self.events.iter().last()?.as_ref()?.scan_type)
    }

    pub fn completed(&self) -> bool {
        let Some(process) = self.get_progress() else {
            return false;
        };

        process == &ScanOrganicEventScanType::Log
    }
}