portier_broker 0.5.2

Reference implementation of the Portier broker protocol
use log::{Level, Metadata, Record};

pub struct Logger {
    level: Level,
}

impl log::Log for Logger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        metadata.level() <= self.level
    }

    fn log(&self, record: &Record) {
        if !self.enabled(record.metadata()) {
            return;
        }
        if record.target().starts_with("portier_broker") {
            eprintln!("{: <6} {}", record.level(), record.args());
        } else {
            eprintln!(
                "{: <6} [{}] {}",
                record.level(),
                record.target(),
                record.args()
            );
        }
    }

    fn flush(&self) {}
}

pub fn init() {
    let level = std::env::var("RUST_LOG")
        .ok()
        .and_then(|level| level.parse().ok())
        .unwrap_or(log::Level::Warn);
    let logger = Box::new(Logger { level });
    log::set_boxed_logger(logger).expect("Failed to initialize logger");
    log::set_max_level(level.to_level_filter());
}