Files
tokio/tokio-codec/src/bytes_codec.rs
T

40 lines
985 B
Rust
Raw Normal View History

2019-02-21 11:56:15 -08:00
use bytes::{BufMut, Bytes, BytesMut};
2018-06-04 22:36:06 -05:00
use std::io;
2019-02-21 11:56:15 -08:00
use tokio_io::_tokio_codec::{Decoder, Encoder};
2018-06-04 22:36:06 -05:00
/// A simple `Codec` implementation that just ships bytes around.
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct BytesCodec(());
impl BytesCodec {
/// Creates a new `BytesCodec` for shipping around raw bytes.
2019-02-21 11:56:15 -08:00
pub fn new() -> BytesCodec {
BytesCodec(())
}
2018-06-04 22:36:06 -05:00
}
impl Decoder for BytesCodec {
type Item = BytesMut;
type Error = io::Error;
fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<BytesMut>, io::Error> {
if buf.len() > 0 {
let len = buf.len();
Ok(Some(buf.split_to(len)))
} else {
Ok(None)
}
}
}
impl Encoder for BytesCodec {
type Item = Bytes;
type Error = io::Error;
fn encode(&mut self, data: Bytes, buf: &mut BytesMut) -> Result<(), io::Error> {
buf.reserve(data.len());
buf.put(data);
Ok(())
}
}