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 }

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl SPRoundTripDps for BerEndFmt

Source§

impl SPRoundTripDps for BerLengthFmt

Source§

impl SPRoundTripDps for BmpStringFmt

Source§

impl SPRoundTripDps for CborInitialFmt

Source§

impl SPRoundTripDps for Empty

Source§

impl SPRoundTripDps for EnumeratedFmt

Source§

impl SPRoundTripDps for Eof

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 Ia5StringFmt

Source§

impl SPRoundTripDps for Integer8Fmt

Source§

impl SPRoundTripDps for Integer16Fmt

Source§

impl SPRoundTripDps for IntegerFmt

Source§

impl SPRoundTripDps for ObjectIdentifierFmt

Source§

impl SPRoundTripDps for PrintableStringFmt

Source§

impl SPRoundTripDps for TagFmt

Source§

impl SPRoundTripDps for Tail

Source§

impl SPRoundTripDps for TeletexStringFmt

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 SPRoundTripDps for UniversalStringFmt

Source§

impl SPRoundTripDps for Utf8StringFmt

Source§

impl SPRoundTripDps for Void

Source§

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

Source§

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

Source§

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

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, B> SPRoundTripDps for Bind<A, B>
where A: SPRoundTripDps + NonTailFmt, B: SpecMap<Input = A::T>, B::Output: SPRoundTripDps,

Source§

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

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 Pair<A, B>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<C> SPRoundTripDps for BerSequenceFmt<C>

Source§

impl<C> SPRoundTripDps for BerSequenceOfFmt<C>

Source§

impl<C> SPRoundTripDps for SetOfFmt<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, 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, 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: SPRoundTripDps, Out> SPRoundTripDps for Mapped<Inner, FnSpecMapper<Inner::T, Out>>

Source§

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

Source§

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

Source§

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

Source§

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

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, C, const N: usize> SPRoundTripDps for Dispatch<T, C, N>
where C: SPRoundTripDps,

Source§

impl<T> SPRoundTripDps for BundledSpecs<T>

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, const LIMIT: usize> SPRoundTripDps for CborFmt<DET, LIMIT>

Source§

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

Source§

impl<const LIMIT: usize, Body, Param> SPRoundTripDps for FixWith<LIMIT, Body, Param>

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 MINIMAL: bool, const N: usize> SPRoundTripDps for ULeb128<MINIMAL, N>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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