Skip to main content

SchemaTemplate

Struct SchemaTemplate 

Source
pub struct SchemaTemplate { /* private fields */ }
Expand description

A learned constant-position template for a fixed-width slot stream.

template holds the constant baseline (varying positions are zero); var_pos lists the byte positions that vary (shipped per slot); const_pos is the complement (checked for the escape). Both position lists are sorted ascending.

Implementations§

Source§

impl SchemaTemplate

Source

pub fn learn(sample: &[&[u8]], width: usize) -> Self

Learn a template from a sample of real slots, all width bytes. A byte position is constant if and only if it is identical in every sample slot; its value is recorded in the template. An empty sample yields the identity template (every position varies, encode is a pass-through plus one flag byte).

Source

pub fn width(&self) -> usize

The fixed slot width this template encodes.

Source

pub fn varying(&self) -> usize

Number of varying (shipped) byte positions per compact slot.

Source

pub fn constant(&self) -> usize

Number of constant (elided) byte positions per compact slot.

Source

pub fn compact_len(&self) -> usize

Compact size of a non-escaped slot: one flag byte plus the varying bytes.

Source

pub fn is_escape(compact: &[u8]) -> bool

Did this compact record take the escape path (the slot violated the template and shipped in full)? A rising escape rate is the signal to re-learn the template.

Source

pub fn encode(&self, slot: &[u8], out: &mut Vec<u8>) -> usize

Encode one width-byte slot, appending the compact record to out. Returns the number of bytes appended. Exact: a slot that differs at a constant position is escaped in full.

Source

pub fn decode(&self, inp: &[u8], out: &mut [u8]) -> usize

Decode one compact record from the front of inp into out (which must be at least width bytes). Returns the number of bytes consumed from inp. Inverse of encode.

Source

pub fn serialize(&self) -> Vec<u8>

Serialize the template for the handshake (the “mask in one packet”): width: u16, n_var: u16, the varying positions (u16 each), then the width-byte constant template. Both ends reconstruct an identical codec from these bytes.

Source

pub fn deserialize(bytes: &[u8]) -> Option<Self>

Reconstruct a template from serialize bytes. Returns None if the buffer is malformed.

Trait Implementations§

Source§

impl Clone for SchemaTemplate

Source§

fn clone(&self) -> SchemaTemplate

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SchemaTemplate

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for SchemaTemplate

Source§

impl PartialEq for SchemaTemplate

Source§

fn eq(&self, other: &SchemaTemplate) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SchemaTemplate

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.