main.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use btserde::{read_from, write_to};
  2. use harness::Message;
  3. use log::{error, info};
  4. use std::io::{self, BufWriter, Write};
  5. #[allow(dead_code)]
  6. fn send<W: Write>(stdout: &mut BufWriter<W>, msg: &Message) {
  7. if let Err(err) = write_to(msg, &mut *stdout) {
  8. error!("Failed to serialize message {:?}", err);
  9. return;
  10. }
  11. if let Err(err) = stdout.flush() {
  12. error!("Failed to flush stdout {:?}", err);
  13. }
  14. }
  15. fn main() {
  16. env_logger::init();
  17. let stdin = io::stdin();
  18. let mut in_lock = stdin.lock();
  19. let stdout = io::stdout();
  20. let mut out_lock = BufWriter::new(stdout.lock());
  21. loop {
  22. let message: Message = match read_from(&mut in_lock) {
  23. Err(err) => {
  24. error!("Failed to read from stdin {:?}", err);
  25. continue;
  26. }
  27. Ok(message) => message,
  28. };
  29. match message {
  30. Message::Echo(_) => {
  31. info!("responding to echo request: {:?}", message);
  32. if let Err(err) = write_to(&message, &mut out_lock) {
  33. error!("Failed to serialize message {:?}", err);
  34. return;
  35. }
  36. if let Err(err) = out_lock.flush() {
  37. error!("Failed to flush stdout {:?}", err);
  38. }
  39. }
  40. Message::Halt => break,
  41. }
  42. }
  43. }