Trait alkahest::Formula

source ·
pub trait Formula {
    const MAX_STACK_SIZE: Option<usize>;
    const EXACT_SIZE: bool;
    const HEAPLESS: bool;
}
Expand description

Trait for data formulas. Types that implement this trait are used as markers to guide serialization and deserialization process. Many types that implement BareFormula implement Serialize and/or Deserialize traits with Self as formula type.

The typical exceptions are lazily serialized and deserialize types. For example [T] can be used as formula for which iterators implement Serialize trait. And SliceIter and FromIterator containers implement Deserialize trait.

Similarly structures that contain [T] may be serialized from structures with identical layout but iterator for that field.

Users may derive(BareFormula) for their types, structures and enums. Then derive(Serialize) and derive(Deserialize) will use formula structure to implement serialization and deserialization. Fields of formula structure must be visible in scope of type where derive(Serialize) and derive(Deserialize) is used.

Additionally for each field of the serialization/deserialization structure there must be field in formula. And all field of formula structure must be used. Otherwise derive macro will generate compile error.

Structures can be used to serialize with enum formula. In this case specific variant is used and layout of that variant must match layout of serialization structure.

Users are also free to implement BareFormula and other traits manually. In this case they are encouraged to pay attention to BareFormula documentation. And provide implementations for Serialize and Deserialize traits with this formula.

For use-cases outside defining new primitives users are encouraged to use derive macros.

Implementing traits incorrectly may result in wrong content of serialized data and deserialized values. It can’t result in undefined behavior.

Examples


struct MyFormula;

impl Formula for MyFormula {
    const MAX_STACK_SIZE: Option<usize> = Some(0);
    const EXACT_SIZE: bool = true;
    const HEAPLESS: bool = true;
}

Required Associated Constants§

source

const MAX_STACK_SIZE: Option<usize>

Maximum size of stack this formula occupies.

source

const EXACT_SIZE: bool

Signals that MAX_STACK_SIZE is accurate.

source

const HEAPLESS: bool

Signals that heap is not used for serialzation.

Implementations on Foreign Types§

source§

impl<AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AA> Formula for (AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AA)where AB: Formula, AC: Formula, AD: Formula, AE: Formula, AF: Formula, AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AA: Formula + ?Sized,

source§

impl Formula for i16

source§

impl<F> Formula for Vec<F>where F: Formula,

source§

const MAX_STACK_SIZE: Option<usize> = <Ref<[F]> as Formula>::MAX_STACK_SIZE

source§

const EXACT_SIZE: bool = true

source§

const HEAPLESS: bool = <Ref<[F]> as Formula>::HEAPLESS

source§

impl Formula for u8

source§

impl<AK, AL, AM, AN, AO, AP, AJ> Formula for (AK, AL, AM, AN, AO, AP, AJ)where AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AJ: Formula + ?Sized,

source§

impl Formula for String

source§

const MAX_STACK_SIZE: Option<usize> = <Ref<str> as Formula>::MAX_STACK_SIZE

source§

const EXACT_SIZE: bool = true

source§

const HEAPLESS: bool = false

source§

impl<AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AF> Formula for (AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AF)where AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AF: Formula + ?Sized,

source§

impl Formula for u128

source§

impl<F> Formula for [F]where F: Formula,

source§

const MAX_STACK_SIZE: Option<usize> = _

source§

const EXACT_SIZE: bool = false

source§

const HEAPLESS: bool = F::HEAPLESS

source§

impl<AP, AO> Formula for (AP, AO)where AP: Formula, AO: Formula + ?Sized,

source§

impl<AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AD> Formula for (AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AD)where AE: Formula, AF: Formula, AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AD: Formula + ?Sized,

source§

impl<AO, AP, AN> Formula for (AO, AP, AN)where AO: Formula, AP: Formula, AN: Formula + ?Sized,

source§

impl<F> Formula for Option<F>where F: Formula,

source§

impl Formula for str

source§

impl<F> Formula for VecDeque<F>where F: Formula,

source§

const MAX_STACK_SIZE: Option<usize> = <Ref<[F]> as Formula>::MAX_STACK_SIZE

source§

const EXACT_SIZE: bool = true

source§

const HEAPLESS: bool = <Ref<[F]> as Formula>::HEAPLESS

source§

impl Formula for f64

source§

impl<AJ, AK, AL, AM, AN, AO, AP, AI> Formula for (AJ, AK, AL, AM, AN, AO, AP, AI)where AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AI: Formula + ?Sized,

source§

impl Formula for i8

source§

impl<AL, AM, AN, AO, AP, AK> Formula for (AL, AM, AN, AO, AP, AK)where AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AK: Formula + ?Sized,

source§

impl<AP> Formula for (AP,)where AP: Formula + ?Sized,

source§

const MAX_STACK_SIZE: Option<usize> = _

source§

const EXACT_SIZE: bool = <AP as Formula>::EXACT_SIZE

source§

const HEAPLESS: bool = <AP as Formula>::HEAPLESS

source§

impl<AI, AJ, AK, AL, AM, AN, AO, AP, AH> Formula for (AI, AJ, AK, AL, AM, AN, AO, AP, AH)where AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AH: Formula + ?Sized,

source§

impl Formula for u64

source§

impl<AH, AI, AJ, AK, AL, AM, AN, AO, AP, AG> Formula for (AH, AI, AJ, AK, AL, AM, AN, AO, AP, AG)where AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AG: Formula + ?Sized,

source§

impl<F, const N: usize> Formula for [F; N]where F: Formula,

source§

const MAX_STACK_SIZE: Option<usize> = _

source§

const EXACT_SIZE: bool = F::EXACT_SIZE

source§

const HEAPLESS: bool = F::HEAPLESS

source§

impl Formula for i64

source§

impl<AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AB> Formula for (AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AB)where AC: Formula, AD: Formula, AE: Formula, AF: Formula, AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AB: Formula + ?Sized,

source§

impl Formula for ()

source§

impl Formula for bool

source§

impl Formula for i128

source§

impl<AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AC> Formula for (AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AC)where AD: Formula, AE: Formula, AF: Formula, AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AC: Formula + ?Sized,

source§

impl Formula for f32

source§

impl<AN, AO, AP, AM> Formula for (AN, AO, AP, AM)where AN: Formula, AO: Formula, AP: Formula, AM: Formula + ?Sized,

source§

impl Formula for u32

source§

impl Formula for u16

source§

impl Formula for i32

source§

impl<AM, AN, AO, AP, AL> Formula for (AM, AN, AO, AP, AL)where AM: Formula, AN: Formula, AO: Formula, AP: Formula, AL: Formula + ?Sized,

source§

impl<AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AE> Formula for (AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AE)where AF: Formula, AG: Formula, AH: Formula, AI: Formula, AJ: Formula, AK: Formula, AL: Formula, AM: Formula, AN: Formula, AO: Formula, AP: Formula, AE: Formula + ?Sized,

Implementors§