voidio 0.1.5

VOID I/O - High-performance Cross-platform I/O for Rust.
use std::io;
use std::io::{stdout, Write};
use std::rc::Rc;
use crate::console::component::SendableComponent;

pub trait ConsoleReceiver {
    fn send(&self, component: &dyn SendableComponent) -> io::Result<()>;
}

pub struct ConsoleSender {
    console: Box<dyn ConsoleReceiver>,
}
impl ConsoleSender {
    pub fn new<R: ConsoleReceiver + 'static>(receiver: R) -> ConsoleSender {
        ConsoleSender {
            console: Box::new(receiver)
        }
    }
    pub fn send<C: SendableComponent>(&self, component: C) -> io::Result<()> {
        self.console.send(&component)
    }
}

impl ConsoleReceiver for io::Stdout {
    fn send(&self, component: &dyn SendableComponent) -> io::Result<()> {
        let mut stdout = stdout();
        writeln!(stdout, "{}", component)?;
        Ok(())
    }
}