I'm creating a TCP server with tokio because I like parallel computing and I have some custom traits that implement functions for std::io::Read
and std::io::Write
so I can parse packets:
pub trait VarStringReader {
fn read_varstring(&mut self) -> Result<String>;
}
impl<R: io::Read> VarStringReader for R {
fn read_varstring(&mut self) -> Result<String> {
let length: usize = self.read_varint()?; //see my library variant-encoding (fork of integer-encoding-rs)
let mut buf = vec![0 as u8; length];
self.read(&mut buf)?;
Ok(String::from_utf8_lossy(&buf).to_string())
}
}
This doesn't work with tokio::io::AsyncRead
because AsyncRead
doesn't implement std::io::Read
. How can I get a synchronous reading (and writing) handler to be able to use my custom functions?