123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- use btserde::{read_from, write_to};
- use harness::Message;
- use log::{error, info};
- use std::io::{self, BufWriter, Write};
- #[allow(dead_code)]
- fn send<W: Write>(stdout: &mut BufWriter<W>, 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,
- }
- }
- }
|