#![deny(missing_docs)]
extern crate bytes;
extern crate nt_leb128 as leb128;
use bytes::{Buf, BytesMut, BufMut};
use leb128::write::LEB128Write;
use leb128::read::LEB128Read;
pub trait ClientMessage: Send {
fn encode(&self, buf: &mut BytesMut);
}
pub trait ServerMessage {
fn decode(buf: &mut Buf) -> (Option<Self>, usize)
where Self: Sized;
}
impl ClientMessage for String {
fn encode(&self, buf: &mut BytesMut) {
buf.write_unsigned(self.len() as u64).unwrap();
buf.put_slice(self.as_bytes());
}
}
impl ServerMessage for String {
fn decode(mut buf: &mut Buf) -> (Option<Self>, usize) {
let (len, bytes_read) = buf.read_unsigned().unwrap();
let len = len as usize;
let mut strbuf = vec![0; len];
buf.copy_to_slice(&mut strbuf[..]);
(Some(::std::string::String::from_utf8(strbuf).unwrap()), len + bytes_read)
}
}