1use std::result::Result;
9use std::io;
10
11pub use util::core::GError;
12pub use util::core::GResult;
13
14
15pub trait MessageReader {
16 fn read_next(&mut self) -> Result<String, GError>;
17}
18
19pub struct ReadLineMessageReader<T: io::BufRead>(pub T);
22
23impl<T : io::BufRead> MessageReader for ReadLineMessageReader<T> {
24 fn read_next(&mut self) -> Result<String, GError> {
25 let mut result = String::new();
26 try!(self.0.read_line(&mut result));
27 Ok(result)
28 }
29}
30
31pub trait MessageWriter {
32 fn write_message(&mut self, msg: &str) -> Result<(), GError>;
33}
34
35pub struct WriteLineMessageWriter<T: io::Write>(pub T);
38
39impl<T : io::Write> MessageWriter for WriteLineMessageWriter<T> {
40 fn write_message(&mut self, msg: &str) -> Result<(), GError> {
41 try!(self.0.write_all(msg.as_bytes()));
42 try!(self.0.write_all(&['\n' as u8]));
43 try!(self.0.flush());
44 Ok(())
45 }
46}