Skip to main content

Tail

Struct Tail 

Source
pub struct Tail;
Expand description

Tail combinator: denotes the “tail” of the format, useful for under-specification.

Parsing semantics: consumes and return all remaining bytes (even if the input is empty).

§Note

The DPS serialization replaces (not prepends to) the output buffer, so Tail should only appear at the end of a format (and the trait system enforces this).

Trait Implementations§

Source§

impl<'i> ByteLen<&'i [u8]> for Tail

Source§

open spec fn exec_inv(&self) -> bool

{ true }
Source§

exec fn length(&self, v: &&'i [u8]) -> len : usize

Source§

impl ByteLen<[u8]> for Tail

Source§

open spec fn exec_inv(&self) -> bool

{ true }
Source§

exec fn length(&self, v: &[u8]) -> len : usize

Source§

impl BytesCombinator for Tail

Source§

proof fn lemma_byte_len_is_buf_len(&self, s: Seq<u8>)

Source§

impl Clone for Tail

Source§

fn clone(&self) -> Tail

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Consistency for Tail

Source§

open spec fn consistent(&self, _v: Self::Val) -> bool

{ true }
Source§

type Val = Seq<u8>

The type of values whose consistency is being checked.
Source§

impl<'a> DerOrd<&'a [u8]> for Tail

Source§

proof fn lemma_der_serialize_len(&self, value: Seq<u8>)

Source§

open spec fn der_remaining(&self, value: Seq<u8>, state: BytesDerState) -> Seq<u8>

{ value.skip(state.pos as int) }
Source§

open spec fn der_state_valid(&self, value: Seq<u8>, state: BytesDerState) -> bool

{ state.pos <= value.len() }
Source§

exec fn der_start(&self, b: &&'a [u8]) -> state : BytesDerState

Source§

exec fn der_next(&self, b: &&'a [u8], state: &mut BytesDerState) -> next : Option<u8>

Source§

fn der_leq(&self, left: &T, right: &T) -> bool

Source§

impl DerOrd<[u8]> for Tail

Source§

proof fn lemma_der_serialize_len(&self, value: Seq<u8>)

Source§

open spec fn der_remaining(&self, value: Seq<u8>, state: BytesDerState) -> Seq<u8>

{ value.skip(state.pos as int) }
Source§

open spec fn der_state_valid(&self, value: Seq<u8>, state: BytesDerState) -> bool

{ state.pos <= value.len() }
Source§

exec fn der_start(&self, b: &[u8]) -> state : BytesDerState

Source§

exec fn der_next(&self, b: &[u8], state: &mut BytesDerState) -> next : Option<u8>

Source§

fn der_leq(&self, left: &T, right: &T) -> bool

Source§

impl DerState for Tail

Source§

impl EquivSerializers for Tail

Source§

impl GoodSerializer for Tail

Source§

impl NonMalleable for Tail

Source§

proof fn lemma_parse_non_malleable(&self, buf1: Seq<u8>, buf2: Seq<u8>)

Source§

fn nonmal_inv(&self) -> bool

Source§

impl<I: InputBuf> Parser<I> for Tail

Source§

exec fn parse(&self, ibuf: &I) -> PResult<Self::PT>

Source§

type PT = I

Executable value returned by this parser.
Source§

fn exec_inv(&self) -> bool

Source§

impl<'i> Prepare<&'i [u8]> for Tail

Source§

exec fn prepare(&self, v: &&'i [u8]) -> checked : Result<usize, PreSerializeError>

Source§

fn exec_inv(&self) -> bool

Source§

impl Prepare<[u8]> for Tail

Source§

exec fn prepare(&self, v: &[u8]) -> checked : Result<usize, PreSerializeError>

Source§

fn exec_inv(&self) -> bool

Source§

impl Productive for Tail

Source§

open spec fn productive_inv(&self) -> bool

{ false }
Source§

proof fn lemma_productive(&self, s: Seq<u8>)

Source§

impl SPRoundTripDps for Tail

Source§

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

Source§

fn unambiguous(&self) -> bool

Source§

impl SafeParser for Tail

Source§

proof fn lemma_parse_safe(&self, ibuf: Seq<u8>)

Source§

fn safe_inv(&self) -> bool

Source§

impl<'i, Output: OutputBuf> Serializer<Output, &'i [u8]> for Tail

Source§

exec fn serialize_into(&self, v: &&'i [u8], obuf: &mut Output)

Source§

fn exec_inv(&self) -> bool

Source§

impl<Output: OutputBuf> Serializer<Output, [u8]> for Tail

Source§

exec fn serialize_into(&self, v: &[u8], obuf: &mut Output)

Source§

fn exec_inv(&self) -> bool

Source§

impl SoundParser for Tail

Source§

proof fn lemma_parse_sound_consumption(&self, ibuf: Seq<u8>)

Source§

proof fn lemma_parse_sound_value(&self, ibuf: Seq<u8>)

Source§

fn sound_inv(&self) -> bool

Source§

impl SpecByteLen for Tail

Source§

open spec fn byte_len(&self, v: Self::T) -> nat

{ v.len() }
Source§

type T = Seq<u8>

The type of values whose byte length is being computed.
Source§

impl SpecParser for Tail

Source§

open spec fn spec_parse(&self, ibuf: Seq<u8>) -> Option<(int, Self::PVal)>

{ Some((ibuf.len() as int, ibuf)) }
Source§

type PVal = Seq<u8>

The type of parsed values.
Source§

impl SpecSerializer for Tail

Source§

open spec fn spec_serialize(&self, v: Self::SVal) -> Seq<u8>

{ v }
Source§

type SVal = Seq<u8>

The type of values to be serialized.
Source§

impl SpecSerializerDps for Tail

Source§

open spec fn spec_serialize_dps(&self, v: Self::SValue, obuf: Seq<u8>) -> Seq<u8>

{ v }
Source§

type SValue = Seq<u8>

The type of values to be serialized.
Source§

impl ValueByteLen for Tail

Source§

open spec fn value_byte_len(v: Self::T) -> nat

{ v.len() }
Source§

proof fn lemma_value_len_matches_byte_len(&self, v: Self::T)

Source§

impl Copy for Tail

Auto Trait Implementations§

§

impl Freeze for Tail

§

impl RefUnwindSafe for Tail

§

impl Send for Tail

§

impl Sync for Tail

§

impl Unpin for Tail

§

impl UnsafeUnpin for Tail

§

impl UnwindSafe for Tail

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, VERUS_SPEC__A> FromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: From<T>,

§

fn obeys_from_spec() -> bool

§

fn from_spec(v: T) -> VERUS_SPEC__A

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T, VERUS_SPEC__A> IntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: Into<T>,

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> T

§

impl<T, U> IntoSpecImpl<U> for T
where U: From<T>,

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> U

Source§

impl<C> NonAmbiguous for C
where C: SPRoundTrip,

Source§

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, )

Source§

fn corollary_serialize_injective_contrapositive( &self, v1: Self::Val, v2: Self::Val, )

Source§

impl<C> PSRoundTrip for C

Source§

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>)

Source§

fn corollary_parse_non_malleable(&self, buf1: Seq<u8>, buf2: Seq<u8>)

Source§

impl<C> SPRoundTrip for C

Source§

open spec fn sp_roundtrip_inv(&self) -> bool

{ self.serialize_inv() && self.equiv_inv() && self.unambiguous() }
Source§

proof fn theorem_serialize_parse_roundtrip(&self, v: <C as SpecByteLen>::T)

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, VERUS_SPEC__A> TryFromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryFrom<T>,

§

fn obeys_try_from_spec() -> bool

§

fn try_from_spec( v: T, ) -> Result<VERUS_SPEC__A, <VERUS_SPEC__A as TryFrom<T>>::Error>

Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, VERUS_SPEC__A> TryIntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryInto<T>,

§

fn obeys_try_into_spec() -> bool

§

fn try_into_spec(self) -> Result<T, <VERUS_SPEC__A as TryInto<T>>::Error>

§

impl<T, U> TryIntoSpecImpl<U> for T
where U: TryFrom<T>,

§

fn obeys_try_into_spec() -> bool

§

fn try_into_spec(self) -> Result<U, <U as TryFrom<T>>::Error>

§

impl<A> SpecEq<&A> for A
where A: ?Sized,

§

impl<A> SpecEq<&mut A> for A
where A: ?Sized,

§

impl<A> SpecEq<A> for A
where A: ?Sized,

§

impl<A> SpecEq<Ghost<A>> for A

§

impl<A> SpecEq<Tracked<A>> for A