Struct asynchronous_codec::LengthCodec
source · pub struct LengthCodec;
Expand description
A simple Codec
implementation sending your data by prefixing it by its length.
§Example
This codec will most likely be used wrapped in another codec like so.
use asynchronous_codec::{Decoder, Encoder, LengthCodec};
use bytes::{Bytes, BytesMut};
use std::io::{Error, ErrorKind};
pub struct MyStringCodec(LengthCodec);
impl Encoder for MyStringCodec {
type Item = String;
type Error = Error;
fn encode(&mut self, src: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
let bytes = Bytes::from(src);
self.0.encode(bytes, dst)
}
}
impl Decoder for MyStringCodec {
type Item = String;
type Error = Error;
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
match self.0.decode(src)? {
Some(bytes) => {
match String::from_utf8(bytes.to_vec()) {
Ok(string) => Ok(Some(string)),
Err(e) => Err(Error::new(ErrorKind::InvalidData, e))
}
},
None => Ok(None),
}
}
}
Trait Implementations§
Auto Trait Implementations§
impl Freeze for LengthCodec
impl RefUnwindSafe for LengthCodec
impl Send for LengthCodec
impl Sync for LengthCodec
impl Unpin for LengthCodec
impl UnwindSafe for LengthCodec
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more