use std::env;
use std::fs::File;
use std::io::{Error, Write};
use crate::internal::{LibHandler, LOCAL_OUTPUT};
pub struct LocalHandler {
writer: File,
}
impl LocalHandler {
pub fn new() -> Option<Self> {
let filename = env::var(LOCAL_OUTPUT).ok()?;
let create_result = File::create(&filename);
if let Ok(writer) = create_result {
Some(LocalHandler { writer })
} else {
eprintln!(
"Unable to write to '{}' - {}",
filename.as_str(),
create_result.unwrap_err()
);
None
}
}
}
impl LibHandler for LocalHandler {
fn output(&self, value: &str) -> Result<(), Error> {
let mut writer_mut = &self.writer;
writeln!(writer_mut, "{}", value)?;
writer_mut.flush()?;
Ok(())
}
fn random(&self) -> u64 {
rand::random::<u64>()
}
}