mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-18 00:00:09 +02:00
Strategy was to - copy the old codec code that was temporarily being stashed in `tokio-io` - modify all the type signatures to use Pin, as literal a translation as possible - fix up the tests likewise This is intended just to get things compiling and passing tests. Beyond that there is surely lots of refactoring that can be done to make things more idiomatic. The docs are unchanged. Closes #1189
41 lines
995 B
Rust
41 lines
995 B
Rust
use crate::decoder::Decoder;
|
|
use crate::encoder::Encoder;
|
|
use bytes::{BufMut, Bytes, BytesMut};
|
|
use std::io;
|
|
|
|
/// 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.
|
|
pub fn new() -> BytesCodec {
|
|
BytesCodec(())
|
|
}
|
|
}
|
|
|
|
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(())
|
|
}
|
|
}
|