use super::{
LAYOUT,
OUTPUT
};
use std::io::{
stdout,
Write
};
use libutils_console::Update as UpdateTrait;
use bytediff::Diff;
pub struct Update;
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;
});
}
}