Skip to main content

NonTailFmt

Trait NonTailFmt 

Source
pub trait NonTailFmt: SpecByteLen + SpecSerializerDps<SValue = Self::T> {
    // Required methods
    proof fn lemma_serialize_dps_prepend(&self, v: Self::SValue, obuf: Seq<u8>);
    proof fn lemma_serialize_dps_len(&self, v: Self::SValue, obuf: Seq<u8>);

    // Provided method
    open spec fn serialize_dps_inv(&self) -> bool { ... }
}
Expand description

A non-tail format combinator would allow for things to be serialized after itself.

§Notable formats that are not non-tail (i.e., tail formats)

Required Methods§

Source

proof fn lemma_serialize_dps_prepend(&self, v: Self::SValue, obuf: Seq<u8>)

requires
self.serialize_dps_inv(),
ensures
exists |new_buf: Seq<u8>| self.spec_serialize_dps(v, obuf) == new_buf + obuf,

The serializer prepends to obuf (so it will leave obuf intact, no truncation, corruption, etc.).

Another way to think about this is that the format allows for trailing bytes after itself, whereas a tail format would only allow for leading bytes before itself.

Source

proof fn lemma_serialize_dps_len(&self, v: Self::SValue, obuf: Seq<u8>)

requires
self.serialize_dps_inv(),
ensures
self.spec_serialize_dps(v, obuf).len() - obuf.len() == self.byte_len(v),

number of bytes prepended equals byte_len(v).

Provided Methods§

Source

open spec fn serialize_dps_inv(&self) -> bool

{ true }

Optional invariant for DPS serializer proofs.

Implementors§

Source§

impl NonTailFmt for BerLengthFmt

Source§

impl NonTailFmt for TagFmt

Source§

impl NonTailFmt for CborInitialFmt

Source§

impl NonTailFmt for Empty

Source§

impl NonTailFmt for Void

Source§

impl NonTailFmt for I8

Source§

impl NonTailFmt for I16Be

Source§

impl NonTailFmt for I16Le

Source§

impl NonTailFmt for I32Be

Source§

impl NonTailFmt for I32Le

Source§

impl NonTailFmt for I64Be

Source§

impl NonTailFmt for I64Le

Source§

impl NonTailFmt for U8

Source§

impl NonTailFmt for U16Be

Source§

impl NonTailFmt for U16Le

Source§

impl NonTailFmt for U24Be

Source§

impl NonTailFmt for U24Le

Source§

impl NonTailFmt for U32Be

Source§

impl NonTailFmt for U32Le

Source§

impl NonTailFmt for U64Be

Source§

impl NonTailFmt for U64Le

Source§

impl<A> NonTailFmt for Opt<A>
where A: NonTailFmt,

Source§

impl<A> NonTailFmt for Star<A>
where A: NonTailFmt,

Source§

impl<A, B> NonTailFmt for Sum<A, B>
where A: NonTailFmt, B: NonTailFmt,

Source§

impl<A, B> NonTailFmt for Choice<A, B>
where A: NonTailFmt, B: NonTailFmt,

Source§

impl<A, B> NonTailFmt for Bind<A, B>
where A: NonTailFmt, B: SpecMap<Input = A::SValue>, B::Output: NonTailFmt,

Source§

impl<A, B> NonTailFmt for Pair<A, B>
where A: NonTailFmt, B: NonTailFmt,

Source§

impl<A, B, C> NonTailFmt for Permute3<A, B, C>
where A: NonTailFmt, B: NonTailFmt, C: NonTailFmt,

Source§

impl<A, B, C, D> NonTailFmt for Permute4<A, B, C, D>

Source§

impl<A, B, C, D, E> NonTailFmt for Permute5<A, B, C, D, E>

Source§

impl<A, B, const CHECK: bool> NonTailFmt for Preceded<A, A::SValue, B, CHECK>
where A: NonTailFmt, B: NonTailFmt,

Source§

impl<A, B, const CHECK: bool> NonTailFmt for Terminated<A, B, B::SValue, CHECK>
where A: NonTailFmt, B: NonTailFmt,

Source§

impl<A, Pred> NonTailFmt for Refined<A, Pred>
where A: NonTailFmt, Pred: SpecPred<A::SValue>,

Source§

impl<A, Then> NonTailFmt for AndThen<A, Then>

Source§

impl<A: NonTailFmt, B: NonTailFmt> NonTailFmt for Optional<A, B>

Source§

impl<A: NonTailFmt, B: NonTailFmt> NonTailFmt for Repeat<A, B>

Source§

impl<C: NonTailFmt, N: AsLen> NonTailFmt for RepeatN<C, N>

Source§

impl<C: SpecCombinator + GoodSerializer + EquivSerializers> NonTailFmt for BerSequenceFmt<C>

Source§

impl<C: SpecCombinator + GoodSerializer + EquivSerializersGeneral> NonTailFmt for BerSequenceOfFmt<C>

Source§

impl<C: SpecCombinator, const LIMIT: usize> NonTailFmt for BerCharStringFmt<C, LIMIT>

Source§

impl<Content: SpecCombinator + GoodSerializer + EquivSerializers, const DER: bool> NonTailFmt for ASN1Fmt<Content, DER>

Source§

impl<F> NonTailFmt for ImplicitlyTaggedFmt<F>

Source§

impl<Field, Rest, const DER: bool> NonTailFmt for DefaultedFmt<Field, Field::SValue, Rest, DER>
where Field: NonTailFmt, Rest: NonTailFmt,

Source§

impl<Head, Tail> NonTailFmt for Implicit<Head, Tail>
where Head: NonTailFmt, Tail: DepCombinator<Key = Head::SValue>, Tail::Body: NonTailFmt<T = Tail::Val>,

Source§

impl<Inner> NonTailFmt for Const<Inner, Inner::SValue>
where Inner: NonTailFmt,

Source§

impl<Inner, Len> NonTailFmt for ExactLen<Inner, Len>
where Inner: GoodSerializer + EquivSerializers, Len: AsLen,

Source§

impl<Inner, M> NonTailFmt for Mapped<Inner, M>
where Inner: NonTailFmt, M: SpecMapper<In = Inner::SValue>,

Source§

impl<Inner, M> NonTailFmt for TryMap<Inner, M>
where Inner: NonTailFmt, M: SpecMapper<In = Inner::SValue>,

Source§

impl<Inner, M, MRev> NonTailFmt for Mapped<Inner, BiMap<M, MRev>>
where Inner: NonTailFmt, M: SpecMap<Input = Inner::SValue>, MRev: SpecMap<Input = M::Output, Output = M::Input>,

Source§

impl<Inner: NonTailFmt> NonTailFmt for Cond<Inner>

Source§

impl<Inner: NonTailFmt> NonTailFmt for Named<Inner>

Source§

impl<Inner: NonTailFmt> NonTailFmt for Ref<Inner>

Source§

impl<Len: AsLen> NonTailFmt for Varied<Len>

Source§

impl<Of, Tg> NonTailFmt for SuffixTagged<Of, Tg, Tg::T>

Source§

impl<P1, P2> NonTailFmt for Permute2<P1, P2>
where P1: NonTailFmt, P2: NonTailFmt,

Source§

impl<Repr, Tuple, Nominal> NonTailFmt for Bits<Repr, Tuple, Nominal>
where Repr: NonTailFmt,

Source§

impl<T> NonTailFmt for BundledSpecs<T>

Source§

impl<T, C: NonTailFmt, const N: usize> NonTailFmt for Dispatch<T, C, N>

Source§

impl<Tg, Of> NonTailFmt for PrefixTagged<Tg, Tg::T, Of>

Source§

impl<const DER: bool> NonTailFmt for AnyFmt<DER>

Source§

impl<const DER: bool> NonTailFmt for BoolFmt<DER>

Source§

impl<const DER: bool> NonTailFmt for LengthFmt<DER>

Source§

impl<const DER: bool> NonTailFmt for NatLengthFmt<DER>

Source§

impl<const DET: bool> NonTailFmt for CborHeadFmt<DET>

Source§

impl<const DET: bool, const LIMIT: usize> NonTailFmt for CborFmt<DET, LIMIT>

Source§

impl<const LIMIT: usize> NonTailFmt for BerAnyFmt<LIMIT>

Source§

impl<const LIMIT: usize> NonTailFmt for BerBitStringFmt<LIMIT>

Source§

impl<const LIMIT: usize> NonTailFmt for BerOctetStringFmt<LIMIT>

Source§

impl<const LIMIT: usize, Body, Param> NonTailFmt for FixWith<LIMIT, Body, Param>
where Body: NonTailFmtRecBody, Body::Body: NonTailFmt, Param: DeepView<V = Body::Param>,

Source§

impl<const MINIMAL: bool> NonTailFmt for Base128Fmt<MINIMAL>

Source§

impl<const MINIMAL: bool> NonTailFmt for VarInt<MINIMAL>

Source§

impl<const MINIMAL: bool, const N: usize> NonTailFmt for ULeb128<MINIMAL, N>

Source§

impl<const N: usize> NonTailFmt for Fixed<N>

Source§

impl<const N: usize> NonTailFmt for Const<Fixed<N>, [u8; N]>

Source§

impl<const N: usize, C: NonTailFmt> NonTailFmt for Array<N, C>

Source§

impl<const NONDETERMINISTIC: bool, A, B> NonTailFmt for Alt<A, B, NONDETERMINISTIC>
where A: NonTailFmt + Consistency<Val = A::SValue>, B: NonTailFmt<T = A::T> + Consistency<Val = B::SValue>,