cpclib-common 0.9.0

common libraries used in cpclib
Documentation
use std::fmt::Debug;

pub trait EventObserver: Debug + Sync {
    fn emit_stdout(&self, s: &str);
    fn emit_stderr(&self, s: &str);
}

impl EventObserver for () {
    fn emit_stdout(&self, s: &str) {
        println!("{}", s)
    }

    fn emit_stderr(&self, s: &str) {
        eprintln!("{}", s)
    }
}

impl<E: EventObserver> EventObserver for Option<E> {
    fn emit_stdout(&self, s: &str) {
        if let Some(e) = self {
            e.emit_stdout(s)
        }
    }

    fn emit_stderr(&self, s: &str) {
        if let Some(e) = self {
            e.emit_stderr(s)
        }
    }
}

impl<E: EventObserver> EventObserver for &E {
    fn emit_stdout(&self, s: &str) {
        (*self).emit_stdout(s)
    }

    fn emit_stderr(&self, s: &str) {
        (*self).emit_stderr(s)
    }
}

impl<E: EventObserver> EventObserver for Box<E> {
    fn emit_stdout(&self, s: &str) {
        self.as_ref().emit_stdout(s)
    }

    fn emit_stderr(&self, s: &str) {
        self.as_ref().emit_stderr(s)
    }
}