Struct futures_codec::LengthCodec[][src]

pub struct LengthCodec;

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 futures_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

impl Decoder for LengthCodec[src]

type Item = Bytes

The type of items returned by decode

type Error = Error

The type of decoding errors.

impl Encoder for LengthCodec[src]

type Item = Bytes

The type of items consumed by encode

type Error = Error

The type of encoding errors.

Auto Trait Implementations

impl RefUnwindSafe for LengthCodec

impl Send for LengthCodec

impl Sync for LengthCodec

impl Unpin for LengthCodec

impl UnwindSafe for LengthCodec

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.