use std::result::Result;
use std::io;
pub use util::core::GError;
pub use util::core::GResult;
pub trait MessageReader {
fn read_next(&mut self) -> Result<String, GError>;
}
pub struct ReadLineMessageReader<T: io::BufRead>(pub T);
impl<T : io::BufRead> MessageReader for ReadLineMessageReader<T> {
fn read_next(&mut self) -> Result<String, GError> {
let mut result = String::new();
try!(self.0.read_line(&mut result));
Ok(result)
}
}
pub trait MessageWriter {
fn write_message(&mut self, msg: &str) -> Result<(), GError>;
}
pub struct WriteLineMessageWriter<T: io::Write>(pub T);
impl<T : io::Write> MessageWriter for WriteLineMessageWriter<T> {
fn write_message(&mut self, msg: &str) -> Result<(), GError> {
try!(self.0.write_all(msg.as_bytes()));
try!(self.0.write_all(&['\n' as u8]));
try!(self.0.flush());
Ok(())
}
}