Skip to main content

Encode

Trait Encode 

Source
pub trait Encode {
    // Required methods
    fn encoded_size(&self) -> usize;
    fn encode(&self, buf: &mut WriteBuf<'_>) -> Result<()>;
}
Expand description

A value that can be written to a WriteBuf.

Implementors must guarantee that Encode::encoded_size returns the exact number of bytes Encode::encode writes on success.

§Example

use wire_codec::{Encode, Result, WriteBuf};

struct Tagged {
    tag: u8,
    value: u32,
}

impl Encode for Tagged {
    fn encoded_size(&self) -> usize { 5 }
    fn encode(&self, buf: &mut WriteBuf<'_>) -> Result<()> {
        buf.write_u8(self.tag)?;
        buf.write_u32_be(self.value)
    }
}

let mut out = [0u8; 5];
let mut buf = WriteBuf::new(&mut out);
Tagged { tag: 0x01, value: 0xCAFEBABE }.encode(&mut buf).unwrap();
assert_eq!(&out, &[0x01, 0xCA, 0xFE, 0xBA, 0xBE]);

Required Methods§

Source

fn encoded_size(&self) -> usize

Number of bytes Encode::encode will write on success.

Source

fn encode(&self, buf: &mut WriteBuf<'_>) -> Result<()>

Write self into buf, advancing its write position.

§Errors

Returns an error if buf lacks capacity for Encode::encoded_size bytes or if a sub-encoder reports an invariant violation.

Implementations on Foreign Types§

Source§

impl Encode for u8

Source§

fn encoded_size(&self) -> usize

Source§

fn encode(&self, buf: &mut WriteBuf<'_>) -> Result<()>

Implementors§