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.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl Encode for u8

Source§

fn encoded_size(&self) -> usize

Source§

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

Implementors§