#![warn(missing_docs)]
#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
mod utils;
mod basic;
mod series;
mod size;
mod fixed;
mod variable;
pub use bm_le::{Compact, CompactRef, MaxVec};
pub use series::{Series, SeriesItem};
pub use ssz_derive::{Codec, Encode, Decode};
pub use crate::size::{Size, VariableSize, Add, Mul, Div};
use alloc::vec::Vec;
#[derive(Debug)]
pub enum Error {
IncorrectSize,
InvalidType,
InvalidLength,
ListTooLarge,
}
pub trait Codec {
type Size: Size;
}
pub trait Encode: Codec {
fn encode(&self) -> Vec<u8> {
let mut r = Vec::new();
self.using_encoded(|buf| r.extend_from_slice(buf));
r
}
fn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R {
f(&self.encode())
}
}
pub trait Decode: Codec + Sized {
fn decode(value: &[u8]) -> Result<Self, Error>;
}
pub type LengthOffset = u32;