lilliput-core 0.1.0

Low-level implementation of encoding/decoding logic for lilliput format
Documentation
use crate::config::PackingMode;

pub trait WithBeBytes {
    fn with_be_bytes<T, F>(&self, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T;
}

pub trait WithPackedBeBytes: WithBeBytes {
    fn with_native_packed_be_bytes<T, F>(&self, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T;

    fn with_optimal_packed_be_bytes<T, F>(&self, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T;

    #[inline]
    fn with_packed_be_bytes<T, F>(&self, packing_mode: PackingMode, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T,
    {
        match packing_mode {
            PackingMode::None => self.with_be_bytes(f),
            PackingMode::Native => self.with_native_packed_be_bytes(f),
            PackingMode::Optimal => self.with_optimal_packed_be_bytes(f),
        }
    }
}

pub trait WithValidatedPackedBeBytes: WithBeBytes {
    type Validator;

    fn with_validated_native_packed_be_bytes<T, F>(&self, validator: &Self::Validator, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T;

    fn with_validated_optimal_packed_be_bytes<T, F>(&self, validator: &Self::Validator, f: F) -> T
    where
        F: FnOnce(&[u8]) -> T;

    #[inline]
    fn with_validated_packed_be_bytes<T, F>(
        &self,
        packing_mode: PackingMode,
        validator: &Self::Validator,
        f: F,
    ) -> T
    where
        F: FnOnce(&[u8]) -> T,
    {
        match packing_mode {
            PackingMode::None => self.with_be_bytes(f),
            PackingMode::Native => self.with_validated_native_packed_be_bytes(validator, f),
            PackingMode::Optimal => self.with_validated_optimal_packed_be_bytes(validator, f),
        }
    }
}