Skip to main content

SPRoundTripDps

Trait SPRoundTripDps 

Source
pub trait SPRoundTripDps
where Self: SpecByteLen + Consistency<Val = Self::T> + SpecParser<PVal = Self::T> + SpecSerializerDps<SValue = Self::T>,
{ // Required method proof fn theorem_serialize_dps_parse_roundtrip(&self, v: Self::T, obuf: Seq<u8>); // Provided method open spec fn unambiguous(&self) -> bool { ... } }
Expand description

Serialize-parse roundtrip (DPS).

Serializing a consistent value in DPS style and parsing the result recovers the original value, consuming exactly byte_len(v) bytes.

This is a low-level trait. Individual combinators in the library prove this directly; the higher-level property SPRoundTrip is derived via a blanket impl composing this with GoodSerializer and EquivSerializers.

§Note on user-defined combinators

User-defined combinators should prefer proving this trait to proving SPRoundTrip, as

  1. it’s a stronger property and proving and implementing this trait would make Rust/Verus auto-derive a proof for SPRoundTrip;
  2. it makes the combinator composable with the rest of the library, which are all built on this stronger property.

Required Methods§

Source

proof fn theorem_serialize_dps_parse_roundtrip(&self, v: Self::T, obuf: Seq<u8>)

requires
self.unambiguous(),
self.consistent(v),
ensures
({
    let ibuf = self.spec_serialize_dps(v, obuf);
    let n = self.byte_len(v) as int;
    self.spec_parse(ibuf) == Some((n, v))
}),

Provided Methods§

Source

open spec fn unambiguous(&self) -> bool

{ true }

Implementors§

Source§

impl SPRoundTripDps for BerEndFmt

Source§

impl SPRoundTripDps for Integer8Fmt

Source§

impl SPRoundTripDps for Integer16Fmt

Source§

impl SPRoundTripDps for BerLengthFmt

Source§

impl SPRoundTripDps for BmpStringFmt

Source§

impl SPRoundTripDps for EnumeratedFmt

Source§

impl SPRoundTripDps for Ia5StringFmt

Source§

impl SPRoundTripDps for IntegerFmt

Source§

impl SPRoundTripDps for ObjectIdentifierFmt

Source§

impl SPRoundTripDps for PrintableStringFmt

Source§

impl SPRoundTripDps for TagFmt

Source§

impl SPRoundTripDps for TeletexStringFmt

Source§

impl SPRoundTripDps for UniversalStringFmt

Source§

impl SPRoundTripDps for Utf8StringFmt

Source§

impl SPRoundTripDps for CborInitialFmt

Source§

impl SPRoundTripDps for Empty

Source§

impl SPRoundTripDps for Void

Source§

impl SPRoundTripDps for I8

Source§

impl SPRoundTripDps for I16Be

Source§

impl SPRoundTripDps for I16Le

Source§

impl SPRoundTripDps for I32Be

Source§

impl SPRoundTripDps for I32Le

Source§

impl SPRoundTripDps for I64Be

Source§

impl SPRoundTripDps for I64Le

Source§

impl SPRoundTripDps for Eof

Source§

impl SPRoundTripDps for Tail

Source§

impl SPRoundTripDps for U8

Source§

impl SPRoundTripDps for U16Be

Source§

impl SPRoundTripDps for U16Le

Source§

impl SPRoundTripDps for U24Be

Source§

impl SPRoundTripDps for U24Le

Source§

impl SPRoundTripDps for U32Be

Source§

impl SPRoundTripDps for U32Le

Source§

impl SPRoundTripDps for U64Be

Source§

impl SPRoundTripDps for U64Le

Source§

impl<A, B> SPRoundTripDps for PairRev<A, B>

Source§

impl<A, B> SPRoundTripDps for Bind<A, B>
where A: SPRoundTripDps + NonTailFmt, B: SpecMap<Input = A::T>, B::Output: SPRoundTripDps,

Source§

impl<A, B, C> SPRoundTripDps for Permute3<A, B, C>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<A, Pred> SPRoundTripDps for Refined<A, Pred>
where A: SPRoundTripDps, Pred: SpecPred<A::PVal>,

Source§

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

Source§

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

Source§

impl<A: SPRoundTripDps + NonTailFmt, B: SPRoundTripDps> SPRoundTripDps for Pair<A, B>

Source§

impl<A: SPRoundTripDps, B: SPRoundTripDps> SPRoundTripDps for Sum<A, B>

Source§

impl<A: SPRoundTripDps, B: SPRoundTripDps> SPRoundTripDps for Choice<A, B>

Source§

impl<C> SPRoundTripDps for BerSequenceFmt<C>

Source§

impl<C> SPRoundTripDps for BerSequenceOfFmt<C>

Source§

impl<C> SPRoundTripDps for SetOfFmt<C>

Source§

impl<C, N> SPRoundTripDps for RepeatN<C, N>

Source§

impl<C: SpecCombinator + SPRoundTrip, const LIMIT: usize> SPRoundTripDps for BerCharStringFmt<C, LIMIT>

Source§

impl<C: SPRoundTripDps + NonTailFmt + Productive> SPRoundTripDps for OptionalEnd<C>

Source§

impl<C: SPRoundTripDps + NonTailFmt + Productive> SPRoundTripDps for RepeatTillEnd<C>

Source§

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

Source§

impl<F> SPRoundTripDps for ImplicitlyTaggedFmt<F>

Source§

impl<Field, Rest, const DER: bool> SPRoundTripDps for DefaultedFmt<Field, Field::T, Rest, DER>

Source§

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

Source§

impl<Inner, Len> SPRoundTripDps for ExactLen<Inner, Len>

Source§

impl<Inner, M> SPRoundTripDps for Mapped<Inner, M>
where Inner: SPRoundTripDps, M: LossyMapper<In = Inner::T>,

Source§

impl<Inner, M> SPRoundTripDps for TryMap<Inner, M>
where Inner: SPRoundTripDps, M: LossyMapper<In = Inner::T>,

Source§

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

Source§

impl<Inner: SPRoundTripDps> SPRoundTripDps for Cond<Inner>

Source§

impl<Inner: SPRoundTripDps> SPRoundTripDps for Named<Inner>

Source§

impl<Inner: SPRoundTripDps> SPRoundTripDps for Ref<Inner>

Source§

impl<Inner: SPRoundTripDps> SPRoundTripDps for Const<Inner, Inner::PVal>

Source§

impl<Inner: SPRoundTripDps, Out> SPRoundTripDps for Mapped<Inner, FnSpecMapper<Inner::T, Out>>

Source§

impl<Len, Then> SPRoundTripDps for AndThen<Varied<Len>, Then>

Source§

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

Source§

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

Source§

impl<P1, P2> SPRoundTripDps for Permute2<P1, P2>

Source§

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

Source§

impl<T> SPRoundTripDps for BundledSpecs<T>

Source§

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

Source§

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

Source§

impl<Then> SPRoundTripDps for AndThen<Tail, Then>

Source§

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

Source§

impl<const DER: bool> SPRoundTripDps for BitStringFmt<DER>

Source§

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

Source§

impl<const DER: bool> SPRoundTripDps for GeneralizedTimeFmt<DER>

Source§

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

Source§

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

Source§

impl<const DER: bool> SPRoundTripDps for RealFmt<DER>

Source§

impl<const DER: bool> SPRoundTripDps for UtcTimeFmt<DER>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<const NONDETERMINISTIC: bool, A: SPRoundTripDps, B: SPRoundTripDps<T = A::T>> SPRoundTripDps for Alt<A, B, NONDETERMINISTIC>