ax_core 0.3.2

Core library implementing the functions of ax
Documentation
use self::logging_sink::LoggingSink;
use super::{Component, ComponentRequest};
use crate::{node::node_settings::Settings, util::formats::LogSeverity};
use anyhow::Result;
use crossbeam::channel::{Receiver, Sender};
use parking_lot::Mutex;
use std::sync::Arc;

mod logging_sink;
pub struct Logging {
    rx: Receiver<ComponentRequest<()>>,
    logging_sink: Arc<Mutex<LoggingSink>>,
}

impl Component<(), LogSeverity> for Logging {
    fn get_type() -> &'static str {
        "logging"
    }
    fn get_rx(&self) -> &Receiver<ComponentRequest<()>> {
        &self.rx
    }
    fn handle_request(&mut self, _: ()) -> Result<()> {
        Ok(())
    }
    fn extract_settings(&self, settings: Settings) -> Result<LogSeverity> {
        Ok(settings.admin.log_levels.node)
    }
    fn set_up(&mut self, settings: LogSeverity) -> bool {
        if let Err(e) = self.logging_sink.lock().set_level(settings) {
            eprintln!("Error setting new log level: {}", e);
        }
        false
    }
    fn start(&mut self, snd: Sender<anyhow::Result<()>>) -> Result<()> {
        snd.send(Ok(()))?;
        Ok(())
    }
    fn stop(&mut self) -> Result<()> {
        Ok(())
    }
}
impl Logging {
    pub fn new(rx: Receiver<ComponentRequest<()>>, level: LogSeverity, log_no_color: bool, log_as_json: bool) -> Self {
        let logging_sink = Arc::new(Mutex::new(LoggingSink::new(level, log_no_color, log_as_json)));
        Self { rx, logging_sink }
    }
    pub fn set_log_level(&self, level: LogSeverity) -> anyhow::Result<()> {
        self.logging_sink.lock().set_level(level)?;
        Ok(())
    }
}