pub struct Bind<A, B>(pub A, pub B);Expand description
Sequential composition of formats A and B, where B may depend on the value of A.
Parsing semantics: parses A to get a key, then parses B(key) to get the body value,
and returns (key, value).
During serialization, the caller must provide both the key and value.
§Note on usage
Prefer super::Implicit when the key should be recovered from the body value instead of
being carried explicitly through the value type.
Tuple Fields§
§0: A§1: BTrait Implementations§
Source§impl<A, B, STA, STB> ByteLen<(STA, STB)> for Bind<A, B>
impl<A, B, STA, STB> ByteLen<(STA, STB)> for Bind<A, B>
Source§fn length(&self, v: &(STA, STB)) -> usize
fn length(&self, v: &(STA, STB)) -> usize
Returns the exact number of bytes produced by serialization.
Source§impl<A, B> Consistency for Bind<A, B>
impl<A, B> Consistency for Bind<A, B>
Source§type Val = (<A as Consistency>::Val, <<B as SpecMap>::Output as Consistency>::Val)
type Val = (<A as Consistency>::Val, <<B as SpecMap>::Output as Consistency>::Val)
The type of values whose consistency is being checked.
impl<A: Copy, B: Copy> Copy for Bind<A, B>
impl<A, B> EquivSerializers for Bind<A, B>
impl<A, B> EquivSerializersGeneral for Bind<A, B>
impl<A, B> GoodSerializer for Bind<A, B>
impl<A, B> NoLookAhead for Bind<A, B>
impl<A, B> NonMalleable for Bind<A, B>
impl<A, B> NonTailFmt for Bind<A, B>
Source§impl<I, A, B> Parser<I> for Bind<A, B>where
I: InputBuf,
A: Parser<I> + SafeParser,
B::O: Parser<I> + SafeParser,
B: MapRef<A::PT, Input = A::PVal>,
impl<I, A, B> Parser<I> for Bind<A, B>where
I: InputBuf,
A: Parser<I> + SafeParser,
B::O: Parser<I> + SafeParser,
B: MapRef<A::PT, Input = A::PVal>,
Source§impl<A, B, STA, STB> Prepare<(STA, STB)> for Bind<A, B>
impl<A, B, STA, STB> Prepare<(STA, STB)> for Bind<A, B>
Source§fn prepare(&self, v: &(STA, STB)) -> Result<usize, PreSerializeError>
fn prepare(&self, v: &(STA, STB)) -> Result<usize, PreSerializeError>
Validates
v and returns its exact serialized length.impl<A, B> Productive for Bind<A, B>
impl<A, B> SPRoundTripDps for Bind<A, B>
impl<A, B> SafeParser for Bind<A, B>
Source§impl<Output: OutputBuf, A, B, TA, TB> Serializer<Output, (TA, TB)> for Bind<A, B>where
TA: DeepView,
TB: DeepView,
A: Serializer<Output, TA>,
B::O: Serializer<Output, TB>,
B: MapRef<TA, Input = TA::V>,
impl<Output: OutputBuf, A, B, TA, TB> Serializer<Output, (TA, TB)> for Bind<A, B>where
TA: DeepView,
TB: DeepView,
A: Serializer<Output, TA>,
B::O: Serializer<Output, TB>,
B: MapRef<TA, Input = TA::V>,
Source§fn serialize_into(&self, v: &(TA, TB), obuf: &mut Output)
fn serialize_into(&self, v: &(TA, TB), obuf: &mut Output)
Serializes the value
v into the output buffer obuf by (logically) appending the serialized bytes to the end of obuf.
This view has two main benefits: Read moreimpl<A, B> SoundParser for Bind<A, B>
Source§impl<A, B> SpecByteLen for Bind<A, B>
impl<A, B> SpecByteLen for Bind<A, B>
Source§type T = (<A as SpecByteLen>::T, <<B as SpecMap>::Output as SpecByteLen>::T)
type T = (<A as SpecByteLen>::T, <<B as SpecMap>::Output as SpecByteLen>::T)
The type of values whose byte length is being computed.
Source§impl<A, B> SpecParser for Bind<A, B>
impl<A, B> SpecParser for Bind<A, B>
Source§type PVal = (<A as SpecParser>::PVal, <<B as SpecMap>::Output as SpecParser>::PVal)
type PVal = (<A as SpecParser>::PVal, <<B as SpecMap>::Output as SpecParser>::PVal)
The type of parsed values.
Source§impl<A, B> SpecSerializer for Bind<A, B>
impl<A, B> SpecSerializer for Bind<A, B>
Source§type SVal = (<A as SpecSerializer>::SVal, <<B as SpecMap>::Output as SpecSerializer>::SVal)
type SVal = (<A as SpecSerializer>::SVal, <<B as SpecMap>::Output as SpecSerializer>::SVal)
The type of values to be serialized.
Source§impl<A, B> SpecSerializerDps for Bind<A, B>
impl<A, B> SpecSerializerDps for Bind<A, B>
Source§type SValue = (<A as SpecSerializerDps>::SValue, <<B as SpecMap>::Output as SpecSerializerDps>::SValue)
type SValue = (<A as SpecSerializerDps>::SValue, <<B as SpecMap>::Output as SpecSerializerDps>::SValue)
The type of values to be serialized.
impl<A, B> StaticByteLen for Bind<A, B>
impl<A, B> ValueByteLen for Bind<A, B>
Auto Trait Implementations§
impl<A, B> Freeze for Bind<A, B>
impl<A, B> RefUnwindSafe for Bind<A, B>where
A: RefUnwindSafe,
B: RefUnwindSafe,
impl<A, B> Send for Bind<A, B>
impl<A, B> Sync for Bind<A, B>
impl<A, B> Unpin for Bind<A, B>
impl<A, B> UnsafeUnpin for Bind<A, B>where
A: UnsafeUnpin,
B: UnsafeUnpin,
impl<A, B> UnwindSafe for Bind<A, B>where
A: UnwindSafe,
B: UnwindSafe,
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<C> NonAmbiguous for Cwhere
C: SPRoundTrip,
impl<C> PSRoundTrip for C
impl<C> SPRoundTrip for C
Source§impl<T, S> SerializerExt<T> for Swhere
S: SpecByteLen<T = <T as DeepView>::V> + SpecSerializer<SVal = <T as DeepView>::V> + Consistency<Val = <T as DeepView>::V>,
T: DeepView + ?Sized,
impl<T, S> SerializerExt<T> for Swhere
S: SpecByteLen<T = <T as DeepView>::V> + SpecSerializer<SVal = <T as DeepView>::V> + Consistency<Val = <T as DeepView>::V>,
T: DeepView + ?Sized,
Source§fn serialize<'a>(&self, v: &T, obuf: &'a mut [u8])where
Self: Serializer<OutputSlice<'a>, T>,
fn serialize<'a>(&self, v: &T, obuf: &'a mut [u8])where
Self: Serializer<OutputSlice<'a>, T>,
Serializes into an exactly-sized caller-provided slice without allocating.