libutils-terminal 1.1.0

A custom embedded terminal handler
Documentation
//^
//^ HEAD
//^

//> HEAD -> SUPER
use super::{
    LAYOUT,
    OUTPUT
};

//> HEAD -> STD
use std::io::{
    stdout,
    Write
};

//> HEAD -> CONSOLE
use libutils_console::Update as UpdateTrait;

//> HEAD -> BYTEDIFF
use bytediff::Diff;


//^
//^ UPDATE
//^

//> UPDATE -> STRUCT
pub struct Update;

//> UPDATE -> TRAIT
impl UpdateTrait for Update {
    fn sync(self) -> () {
        let mut content = LAYOUT.read(|layout| {
            layout.iter().map(ToString::to_string).collect::<Vec<String>>()
        }).join("\n\n");
        content.push('\n');
        OUTPUT.write(|output| {
            let mut lock = stdout().lock();
            lock.write(<Diff as Into<Vec<u8>>>::into(Diff::new(
                output.as_bytes(), 
                content.as_bytes()
            )).as_ref()).unwrap();
            lock.flush().unwrap();
            *output = content;
        });
    }
}