#[cfg(test)]
#[path = "./env_test.rs"]
mod env_test;
use std::io::{stderr, stdout, Write};
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
pub struct Env {
pub out: Box<dyn Write>,
pub err: Box<dyn Write>,
pub halt: Arc<AtomicBool>,
}
impl Env {
pub fn default() -> Env {
Env {
out: Box::new(stdout()),
err: Box::new(stderr()),
halt: Arc::new(AtomicBool::new(false)),
}
}
pub fn new(
out: Option<Box<dyn Write>>,
err: Option<Box<dyn Write>>,
halt: Option<Arc<AtomicBool>>,
) -> Env {
Env {
out: out.unwrap_or_else(|| Box::new(stdout())),
err: err.unwrap_or_else(|| Box::new(stderr())),
halt: halt.unwrap_or_else(|| Arc::new(AtomicBool::new(false))),
}
}
}