Writer

Trait Writer 

Source
pub trait Writer {
    // Required methods
    fn write_byte(&mut self, byte: u8) -> Result<(), SerializeError>;
    fn write_bytes(&mut self, bytes: &[u8]) -> Result<(), SerializeError>;
}
Expand description

A trait for writing bytes during serialization with error handling.

This trait enables custom serialization targets that can report errors, such as buffer overflow. It’s designed to support use cases like buffer pooling where you need to detect when a fixed-size buffer is too small.

§Example

use facet_format_postcard::{Writer, SerializeError};

struct PooledWriter {
    buf: Vec<u8>,  // In practice, this would be from a buffer pool
    overflow: Option<Vec<u8>>,
}

impl Writer for PooledWriter {
    fn write_byte(&mut self, byte: u8) -> Result<(), SerializeError> {
        // Try pooled buffer first, fall back to Vec on overflow
        if let Some(ref mut overflow) = self.overflow {
            overflow.push(byte);
        } else if self.buf.len() < self.buf.capacity() {
            self.buf.push(byte);
        } else {
            // Overflow - allocate Vec and transfer contents
            let mut overflow = Vec::new();
            overflow.extend_from_slice(&self.buf);
            overflow.push(byte);
            self.overflow = Some(overflow);
        }
        Ok(())
    }

    fn write_bytes(&mut self, bytes: &[u8]) -> Result<(), SerializeError> {
        if let Some(ref mut overflow) = self.overflow {
            overflow.extend_from_slice(bytes);
        } else if self.buf.len() + bytes.len() <= self.buf.capacity() {
            self.buf.extend_from_slice(bytes);
        } else {
            // Overflow - allocate Vec and transfer contents
            let mut overflow = Vec::new();
            overflow.extend_from_slice(&self.buf);
            overflow.extend_from_slice(bytes);
            self.overflow = Some(overflow);
        }
        Ok(())
    }
}

Required Methods§

Source

fn write_byte(&mut self, byte: u8) -> Result<(), SerializeError>

Write a single byte to the writer.

Source

fn write_bytes(&mut self, bytes: &[u8]) -> Result<(), SerializeError>

Write a slice of bytes to the writer.

Implementations on Foreign Types§

Source§

impl Writer for Vec<u8>

Source§

fn write_byte(&mut self, byte: u8) -> Result<(), SerializeError>

Source§

fn write_bytes(&mut self, bytes: &[u8]) -> Result<(), SerializeError>

Implementors§