fips_terminal_ui 0.1.0

the terminal ui for fips
Documentation
use fips_configuration::configuration::Configuration;
use fips_plugin_registry::ExternalFunctions;

use std::{
    sync::{Arc, Mutex},
};

use crate::debug::{PrintInfo, LoggableNT};

pub struct State {
    pub messages: Mutex<Vec<PrintInfo>>,
    pub plugins: Arc<Mutex<ExternalFunctions>>,
    pub configuration: Arc<Mutex<Configuration>>,
    pub traffic_info: Mutex<Vec<LoggableNT>>,
}

#[derive(Debug, Clone, PartialEq)]
pub enum MainError {
    Other { msg: String },
}

impl State {
    pub fn add_traffic_info(&self, traffic_info: LoggableNT) -> Result<(), MainError> {
        if let Ok(mut traffic) = self.traffic_info.lock() {
            traffic.insert(0, traffic_info);
            if traffic.len() > 20 {
                traffic.pop();
            }
        }
        Ok(())
    }

    pub fn add_message(&self, message: PrintInfo) -> Result<(), MainError> {
        if let Ok(mut messages) = self.messages.lock() {
            messages.insert(0, message);
            if messages.len() > 200 {
                messages.pop();
            }
        }
        Ok(())
    }
}