bacon 0.1.0

a background compiler for rust
use {
    crate::*,
    anyhow::*,
    crossbeam::channel::{bounded, select, unbounded, Receiver, Sender},
    std::{env, thread},
};

pub struct Computer {
    pub task_sender: Sender<()>,
    pub report_receiver: Receiver<Report>,
}

impl Computer {
    pub fn new() -> Result<Self> {
        let (task_sender, task_receiver) = bounded(0);
        let (report_sender, report_receiver) = bounded(1);
        thread::spawn(move || {
            for _ in task_receiver {
                debug!("COMPILER got task");
                match Report::compute() {
                    Ok(report) => {
                        if let Err(e) = report_sender.send(report) {
                            debug!("error when sending report: {}", e);
                            break;
                        }
                    }
                    Err(err) => {
                        warn!("error in computing report: {}", err);
                    }
                }
            }
            debug!("closing computer");
        });
        Ok(Self {
            task_sender,
            report_receiver,
        })
    }
}