pub struct DefaultedFmt<Field, Default, Rest, const DER: bool = true>(pub Field, pub Default, pub Rest);Expand description
ASN.1 DEFAULT component with continuation.
The semantic value always contains the component value. On parsing, absence
is replaced by default. On serialization, a value equal to default is
omitted. DER additionally rejects an explicitly encoded default value.
Tuple Fields§
§0: Field§1: Default§2: RestTrait Implementations§
Source§impl<Field, Default, Rest, R, const DER: bool> ByteLen<(Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + ByteLen<Default>,
Rest: SpecByteLen<T = R::V> + ByteLen<R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
impl<Field, Default, Rest, R, const DER: bool> ByteLen<(Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + ByteLen<Default>,
Rest: SpecByteLen<T = R::V> + ByteLen<R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
Source§impl<Field: Clone, Default: Clone, Rest: Clone, const DER: bool> Clone for DefaultedFmt<Field, Default, Rest, DER>
impl<Field: Clone, Default: Clone, Rest: Clone, const DER: bool> Clone for DefaultedFmt<Field, Default, Rest, DER>
Source§exec fn clone(&self) -> cloned : Self
exec fn clone(&self) -> cloned : Self
ensures
call_ensures(Field::clone, (&self.0,), cloned.0),call_ensures(Default::clone, (&self.1,), cloned.1),call_ensures(Rest::clone, (&self.2,), cloned.2),1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<Field, Rest, const DER: bool> Consistency for DefaultedFmt<Field, Field::Val, Rest, DER>where
Field: SpecByteLen + Consistency<Val = Field::T>,
Rest: SpecByteLen + Consistency<Val = Rest::T>,
impl<Field, Rest, const DER: bool> Consistency for DefaultedFmt<Field, Field::Val, Rest, DER>where
Field: SpecByteLen + Consistency<Val = Field::T>,
Rest: SpecByteLen + Consistency<Val = Rest::T>,
Source§open spec fn consistent(&self, v: Self::Val) -> bool
open spec fn consistent(&self, v: Self::Val) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).consistent(v) }Source§type Val = (<Field as Consistency>::Val, <Rest as Consistency>::Val)
type Val = (<Field as Consistency>::Val, <Rest as Consistency>::Val)
The type of values whose consistency is being checked.
Source§impl<Field, Default, Rest, R> DerOrd<(Default, R)> for DefaultedFmt<Field, Default, Rest, true>where
Default: DeepViewIdentity + PartialEq + Structural,
R: DeepView,
Field: DerOrd<Default>,
Rest: DerOrd<R>,
impl<Field, Default, Rest, R> DerOrd<(Default, R)> for DefaultedFmt<Field, Default, Rest, true>where
Default: DeepViewIdentity + PartialEq + Structural,
R: DeepView,
Field: DerOrd<Default>,
Rest: DerOrd<R>,
Source§proof fn lemma_der_serialize_len(&self, value: (Default, R::V))
proof fn lemma_der_serialize_len(&self, value: (Default, R::V))
Source§open spec fn der_remaining(
&self,
value: (Default, R::V),
state: PairDerState<OptDerState<Field::State>, Rest::State>,
) -> Seq<u8>
open spec fn der_remaining( &self, value: (Default, R::V), state: PairDerState<OptDerState<Field::State>, Rest::State>, ) -> Seq<u8>
{
if state.in_left {
(match (&value.0, &state.left) {
(field, OptDerState::Some(inner)) if *field != self.1 => {
self.0.der_remaining(*field, *inner)
}
(field, OptDerState::None) if *field == self.1 => Seq::empty(),
_ => Seq::empty(),
}) + self.2.der_remaining(value.1, state.right)
} else {
self.2.der_remaining(value.1, state.right)
}
}Source§open spec fn der_state_valid(
&self,
value: (Default, R::V),
state: PairDerState<OptDerState<Field::State>, Rest::State>,
) -> bool
open spec fn der_state_valid( &self, value: (Default, R::V), state: PairDerState<OptDerState<Field::State>, Rest::State>, ) -> bool
{
&&& match (&value.0, &state.left) {
(field, OptDerState::Some(inner)) if *field != self.1 => {
self.0.der_state_valid(*field, *inner)
}
(field, OptDerState::None) if *field == self.1 => true,
_ => false,
}
&&& self.2.der_state_valid(value.1, state.right)
&&& !state.in_left
==> {
match (&value.0, &state.left) {
(field, OptDerState::Some(inner)) if *field != self.1 => {
self.0.der_remaining(*field, *inner).len() == 0
}
(field, OptDerState::None) if *field == self.1 => true,
_ => false,
}
}
}Source§exec fn der_start(
&self,
v: &(Default, R),
) -> state : PairDerState<OptDerState<Field::State>, Rest::State>
exec fn der_start( &self, v: &(Default, R), ) -> state : PairDerState<OptDerState<Field::State>, Rest::State>
Source§exec fn der_next(
&self,
v: &(Default, R),
state: &mut PairDerState<OptDerState<Field::State>, Rest::State>,
) -> next : Option<u8>
exec fn der_next( &self, v: &(Default, R), state: &mut PairDerState<OptDerState<Field::State>, Rest::State>, ) -> next : Option<u8>
Source§impl<Field: DerState, Rest: DerState, Default> DerState for DefaultedFmt<Field, Default, Rest, true>
impl<Field: DerState, Rest: DerState, Default> DerState for DefaultedFmt<Field, Default, Rest, true>
type State = PairDerState<OptDerState<<Field as DerState>::State>, <Rest as DerState>::State>
Source§impl<Field, Rest, const DER: bool> EquivSerializers for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + EquivSerializersGeneral<SVal = Field::T>,
Rest: SpecByteLen + EquivSerializers<SVal = Rest::T>,
impl<Field, Rest, const DER: bool> EquivSerializers for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + EquivSerializersGeneral<SVal = Field::T>,
Rest: SpecByteLen + EquivSerializers<SVal = Rest::T>,
Source§impl<Field, Rest, const DER: bool> EquivSerializersGeneral for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + EquivSerializersGeneral<SVal = Field::T>,
Rest: SpecByteLen + EquivSerializersGeneral<SVal = Rest::T>,
impl<Field, Rest, const DER: bool> EquivSerializersGeneral for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + EquivSerializersGeneral<SVal = Field::T>,
Rest: SpecByteLen + EquivSerializersGeneral<SVal = Rest::T>,
Source§open spec fn equiv_general_inv(&self) -> bool
open spec fn equiv_general_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).equiv_general_inv() }Source§proof fn lemma_serialize_equiv(&self, v: Self::SVal, obuf: Seq<u8>)
proof fn lemma_serialize_equiv(&self, v: Self::SVal, obuf: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> GoodSerializer for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: GoodSerializer,
Rest: GoodSerializer,
impl<Field, Rest, const DER: bool> GoodSerializer for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: GoodSerializer,
Rest: GoodSerializer,
Source§open spec fn serialize_inv(&self) -> bool
open spec fn serialize_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).serialize_inv() }Source§proof fn lemma_serialize_len(&self, v: Self::SVal)
proof fn lemma_serialize_len(&self, v: Self::SVal)
Source§impl<Field, Rest, const DER: bool> HasAsn1Start for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + HasAsn1Start<PVal = Field::T>,
Rest: SpecByteLen + HasAsn1Start<PVal = Rest::T>,
ASN.1 DEFAULT has the same possible starts as OPTIONAL: the field or its continuation.
impl<Field, Rest, const DER: bool> HasAsn1Start for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + HasAsn1Start<PVal = Field::T>,
Rest: SpecByteLen + HasAsn1Start<PVal = Rest::T>,
ASN.1 DEFAULT has the same possible starts as OPTIONAL: the field or its continuation.
Source§open spec fn asn1_start(&self) -> Asn1StartDomain
open spec fn asn1_start(&self) -> Asn1StartDomain
{ asn1_start_union(self.0.asn1_start(), self.2.asn1_start()) }Source§proof fn lemma_parse_implies_asn1_start(&self, input: Seq<u8>)
proof fn lemma_parse_implies_asn1_start(&self, input: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> NoLookAhead for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + NoLookAhead<PVal = Field::T>,
Rest: SpecByteLen + NoLookAhead<PVal = Rest::T>,
impl<Field, Rest, const DER: bool> NoLookAhead for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + NoLookAhead<PVal = Field::T>,
Rest: SpecByteLen + NoLookAhead<PVal = Rest::T>,
Source§open spec fn no_lookahead_inv(&self) -> bool
open spec fn no_lookahead_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).no_lookahead_inv() }Source§proof fn lemma_no_lookahead(&self, i1: Seq<u8>, i2: Seq<u8>)
proof fn lemma_no_lookahead(&self, i1: Seq<u8>, i2: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> NonMalleable for DefaultedFmt<Field, Field::PVal, Rest, DER>
impl<Field, Rest, const DER: bool> NonMalleable for DefaultedFmt<Field, Field::PVal, Rest, DER>
Source§open spec fn nonmal_inv(&self) -> bool
open spec fn nonmal_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).nonmal_inv() }Source§proof fn lemma_parse_non_malleable(&self, buf1: Seq<u8>, buf2: Seq<u8>)
proof fn lemma_parse_non_malleable(&self, buf1: Seq<u8>, buf2: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> NonTailFmt for DefaultedFmt<Field, Field::SValue, Rest, DER>where
Field: NonTailFmt,
Rest: NonTailFmt,
impl<Field, Rest, const DER: bool> NonTailFmt for DefaultedFmt<Field, Field::SValue, Rest, DER>where
Field: NonTailFmt,
Rest: NonTailFmt,
Source§open spec fn serialize_dps_inv(&self) -> bool
open spec fn serialize_dps_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).serialize_dps_inv() }Source§proof fn lemma_serialize_dps_prepend(&self, v: Self::SValue, obuf: Seq<u8>)
proof fn lemma_serialize_dps_prepend(&self, v: Self::SValue, obuf: Seq<u8>)
Source§proof fn lemma_serialize_dps_len(&self, v: Self::SValue, obuf: Seq<u8>)
proof fn lemma_serialize_dps_len(&self, v: Self::SValue, obuf: Seq<u8>)
Source§impl<I, Field, Rest, const DER: bool> Parser<I> for DefaultedFmt<Field, Field::T, Rest, DER>where
I: InputBuf,
Field: Parser<I, PT = Field::T> + SafeParser<PVal = Field::T> + SpecByteLen,
Rest: Parser<I> + SafeParser<PVal = Rest::T> + SpecByteLen,
Field::T: DeepView<V = Field::T> + PartialEq + Structural + Copy,
impl<I, Field, Rest, const DER: bool> Parser<I> for DefaultedFmt<Field, Field::T, Rest, DER>where
I: InputBuf,
Field: Parser<I, PT = Field::T> + SafeParser<PVal = Field::T> + SpecByteLen,
Rest: Parser<I> + SafeParser<PVal = Rest::T> + SpecByteLen,
Field::T: DeepView<V = Field::T> + PartialEq + Structural + Copy,
Source§impl<Field, Default, Rest, R, const DER: bool> Prepare<(Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + Prepare<Default>,
Rest: SpecByteLen<T = R::V> + Prepare<R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
impl<Field, Default, Rest, R, const DER: bool> Prepare<(Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + Prepare<Default>,
Rest: SpecByteLen<T = R::V> + Prepare<R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
Source§impl<Field, Rest, const DER: bool> Productive for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + Productive<PVal = Field::T>,
Rest: SpecByteLen + Productive<PVal = Rest::T>,
impl<Field, Rest, const DER: bool> Productive for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + Productive<PVal = Field::T>,
Rest: SpecByteLen + Productive<PVal = Rest::T>,
Source§open spec fn productive_inv(&self) -> bool
open spec fn productive_inv(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).productive_inv() }Source§proof fn lemma_productive(&self, s: Seq<u8>)
proof fn lemma_productive(&self, s: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> SPRoundTripDps for DefaultedFmt<Field, Field::T, Rest, DER>
impl<Field, Rest, const DER: bool> SPRoundTripDps for DefaultedFmt<Field, Field::T, Rest, DER>
Source§open spec fn unambiguous(&self) -> bool
open spec fn unambiguous(&self) -> bool
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).unambiguous() }Source§proof fn theorem_serialize_dps_parse_roundtrip(&self, v: Self::T, obuf: Seq<u8>)
proof fn theorem_serialize_dps_parse_roundtrip(&self, v: Self::T, obuf: Seq<u8>)
Source§impl<Field, Rest, const DER: bool> SafeParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + SafeParser<PVal = Field::T>,
Rest: SpecByteLen + SafeParser<PVal = Rest::T>,
impl<Field, Rest, const DER: bool> SafeParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + SafeParser<PVal = Field::T>,
Rest: SpecByteLen + SafeParser<PVal = Rest::T>,
Source§impl<Output: OutputBuf, Field, Default, Rest, R, const DER: bool> Serializer<Output, (Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + Serializer<Output, Default>,
Rest: SpecByteLen<T = R::V> + Serializer<Output, R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
impl<Output: OutputBuf, Field, Default, Rest, R, const DER: bool> Serializer<Output, (Default, R)> for DefaultedFmt<Field, Default, Rest, DER>where
Field: SpecByteLen<T = Default> + Serializer<Output, Default>,
Rest: SpecByteLen<T = R::V> + Serializer<Output, R>,
Default: DeepView<V = Default> + PartialEq + Structural + Copy,
R: DeepView,
Source§open spec fn exec_inv(&self) -> bool
open spec fn exec_inv(&self) -> bool
{
&&& self.0.exec_inv()
&&& self.2.exec_inv()
&&& forall |v: Default| v.deep_view() == v
}Source§exec fn serialize_into(&self, v: &(Default, R), obuf: &mut Output)
exec fn serialize_into(&self, v: &(Default, R), obuf: &mut Output)
Source§impl<Field, Rest, const DER: bool> SoundParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SoundParser,
Rest: SoundParser,
impl<Field, Rest, const DER: bool> SoundParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SoundParser,
Rest: SoundParser,
Source§impl<Field, Rest, const DER: bool> SpecByteLen for DefaultedFmt<Field, Field::T, Rest, DER>where
Field: SpecByteLen,
Rest: SpecByteLen,
impl<Field, Rest, const DER: bool> SpecByteLen for DefaultedFmt<Field, Field::T, Rest, DER>where
Field: SpecByteLen,
Rest: SpecByteLen,
Source§impl<Field, Rest, const DER: bool> SpecParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + SpecParser<PVal = Field::T>,
Rest: SpecByteLen + SpecParser<PVal = Rest::T>,
impl<Field, Rest, const DER: bool> SpecParser for DefaultedFmt<Field, Field::PVal, Rest, DER>where
Field: SpecByteLen + SpecParser<PVal = Field::T>,
Rest: SpecByteLen + SpecParser<PVal = Rest::T>,
Source§open spec fn spec_parse(&self, ibuf: Seq<u8>) -> Option<(int, Self::PVal)>
open spec fn spec_parse(&self, ibuf: Seq<u8>) -> Option<(int, Self::PVal)>
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).spec_parse(ibuf) }Source§type PVal = (<Field as SpecParser>::PVal, <Rest as SpecParser>::PVal)
type PVal = (<Field as SpecParser>::PVal, <Rest as SpecParser>::PVal)
The type of parsed values.
Source§impl<Field, Rest, const DER: bool> SpecSerializer for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + SpecSerializer<SVal = Field::T>,
Rest: SpecByteLen + SpecSerializer<SVal = Rest::T>,
impl<Field, Rest, const DER: bool> SpecSerializer for DefaultedFmt<Field, Field::SVal, Rest, DER>where
Field: SpecByteLen + SpecSerializer<SVal = Field::T>,
Rest: SpecByteLen + SpecSerializer<SVal = Rest::T>,
Source§open spec fn spec_serialize(&self, v: Self::SVal) -> Seq<u8>
open spec fn spec_serialize(&self, v: Self::SVal) -> Seq<u8>
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).spec_serialize(v) }Source§type SVal = (<Field as SpecSerializer>::SVal, <Rest as SpecSerializer>::SVal)
type SVal = (<Field as SpecSerializer>::SVal, <Rest as SpecSerializer>::SVal)
The type of values to be serialized.
Source§impl<Field, Rest, const DER: bool> SpecSerializerDps for DefaultedFmt<Field, Field::SValue, Rest, DER>where
Field: SpecByteLen + SpecSerializerDps<SValue = Field::T>,
Rest: SpecByteLen + SpecSerializerDps<SValue = Rest::T>,
impl<Field, Rest, const DER: bool> SpecSerializerDps for DefaultedFmt<Field, Field::SValue, Rest, DER>where
Field: SpecByteLen + SpecSerializerDps<SValue = Field::T>,
Rest: SpecByteLen + SpecSerializerDps<SValue = Rest::T>,
Source§open spec fn spec_serialize_dps(&self, v: Self::SValue, obuf: Seq<u8>) -> Seq<u8>
open spec fn spec_serialize_dps(&self, v: Self::SValue, obuf: Seq<u8>) -> Seq<u8>
{ defaulted_fmt::<Field, Rest, DER>(self.0, self.1, self.2).spec_serialize_dps(v, obuf) }Source§type SValue = (<Field as SpecSerializerDps>::SValue, <Rest as SpecSerializerDps>::SValue)
type SValue = (<Field as SpecSerializerDps>::SValue, <Rest as SpecSerializerDps>::SValue)
The type of values to be serialized.
impl<Field: Copy, Default: Copy, Rest: Copy, const DER: bool> Copy for DefaultedFmt<Field, Default, Rest, DER>
Auto Trait Implementations§
impl<Field, Default, Rest, const DER: bool> Freeze for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> RefUnwindSafe for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> Send for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> Sync for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> Unpin for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> UnsafeUnpin for DefaultedFmt<Field, Default, Rest, DER>
impl<Field, Default, Rest, const DER: bool> UnwindSafe for DefaultedFmt<Field, Default, Rest, DER>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, VERUS_SPEC__A> FromSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: From<T>,
impl<T, VERUS_SPEC__A> FromSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: From<T>,
fn obeys_from_spec() -> bool
fn from_spec(v: T) -> VERUS_SPEC__A
§impl<T, VERUS_SPEC__A> IntoSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: Into<T>,
impl<T, VERUS_SPEC__A> IntoSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: Into<T>,
fn obeys_into_spec() -> bool
fn into_spec(self) -> T
§impl<T, U> IntoSpecImpl<U> for Twhere
U: From<T>,
impl<T, U> IntoSpecImpl<U> for Twhere
U: From<T>,
fn obeys_into_spec() -> bool
fn into_spec(self) -> U
Source§impl<C> NonAmbiguous for Cwhere
C: SPRoundTrip,
impl<C> NonAmbiguous for Cwhere
C: SPRoundTrip,
Source§open spec fn nonamb_inv(&self) -> bool
open spec fn nonamb_inv(&self) -> bool
{ self.sp_roundtrip_inv() }Source§proof fn lemma_serialize_injective(
&self,
v1: <C as Consistency>::Val,
v2: <C as Consistency>::Val,
)
proof fn lemma_serialize_injective( &self, v1: <C as Consistency>::Val, v2: <C as Consistency>::Val, )
Source§impl<C> PSRoundTrip for C
impl<C> PSRoundTrip for C
Source§open spec fn ps_roundtrip_inv(&self) -> bool
open spec fn ps_roundtrip_inv(&self) -> bool
{ self.safe_inv() && self.sound_inv() && self.nonmal_inv() && self.sp_roundtrip_inv() }Source§proof fn theorem_parse_serialize_roundtrip(&self, ibuf: Seq<u8>)
proof fn theorem_parse_serialize_roundtrip(&self, ibuf: Seq<u8>)
Source§impl<C> SPRoundTrip for C
impl<C> SPRoundTrip for C
Source§open spec fn sp_roundtrip_inv(&self) -> bool
open spec fn sp_roundtrip_inv(&self) -> bool
{ self.serialize_inv() && self.equiv_inv() && self.unambiguous() }