use btserde::{read_from, write_to}; use harness::Message; use log::{error, info}; use std::io::{self, BufWriter, Write}; #[allow(dead_code)] fn send(stdout: &mut BufWriter, msg: &Message) { if let Err(err) = write_to(msg, &mut *stdout) { error!("Failed to serialize message {:?}", err); return; } if let Err(err) = stdout.flush() { error!("Failed to flush stdout {:?}", err); } } fn main() { env_logger::init(); let stdin = io::stdin(); let mut in_lock = stdin.lock(); let stdout = io::stdout(); let mut out_lock = BufWriter::new(stdout.lock()); loop { let message: Message = match read_from(&mut in_lock) { Err(err) => { error!("Failed to read from stdin {:?}", err); continue; } Ok(message) => message, }; match message { Message::Echo(_) => { info!("responding to echo request: {:?}", message); if let Err(err) = write_to(&message, &mut out_lock) { error!("Failed to serialize message {:?}", err); return; } if let Err(err) = out_lock.flush() { error!("Failed to flush stdout {:?}", err); } } Message::Halt => break, } } }