pub struct FromIntoIterator<Coll, Len>(/* private fields */);Expand description
A generic sequence schema for custom collections that implement
FromIterator (for reading) and whose references implement
IntoIterator with an ExactSizeIterator (for writing).
Works for both element sequences and key-value maps:
- For element collections (sets, ordered sets, etc.) whose reference
iterators yield
&T, the schema forTis used directly. - For map-like collections whose reference iterators yield
(&K, &V)pairs, the pair itself acts as the schema (automatically satisfied whenKandVimplementSchemaWrite<C>).
Intended for external collection types that cannot have a dedicated
schema impl added directly. Unlike Vec, VecDeque, and BinaryHeap, this
container relies on the collection’s FromIterator impl rather than
writing directly into preallocated memory.
For manual SchemaWrite implementations that emit a sequence from an
ad-hoc iterator rather than a concrete collection, see
encode_from_iter_prealloc_check (and its check-skipping counterpart
encode_from_iter).
§Allocation efficiency
During deserialization, the iterator passed to FromIterator has a
precise size_hint matching the number of elements
produced, unless a read error is encountered. Collections whose
FromIterator implementation uses the size hint to preallocate capacity
will allocate optimally. Collections that do not use it will not benefit.
§Examples
use some_crate::{IndexSet, MyMap};
use wincode::{SchemaRead, SchemaWrite, containers::FromIntoIterator, len::BincodeLen};
#[derive(SchemaRead, SchemaWrite)]
struct MyData {
#[wincode(with = "FromIntoIterator<IndexSet<u32>, BincodeLen>")]
items: IndexSet<u32>,
#[wincode(with = "FromIntoIterator<MyMap<u32, u64>, BincodeLen>")]
map: MyMap<u32, u64>,
}Trait Implementations§
Source§impl<'de, Coll, Len, C: ConfigCore> SchemaRead<'de, C> for FromIntoIterator<Coll, Len>where
Len: SeqLen<C>,
Coll: IntoIterator<Item: SchemaRead<'de, C>> + FromIterator<<Coll::Item as SchemaRead<'de, C>>::Dst>,
impl<'de, Coll, Len, C: ConfigCore> SchemaRead<'de, C> for FromIntoIterator<Coll, Len>where
Len: SeqLen<C>,
Coll: IntoIterator<Item: SchemaRead<'de, C>> + FromIterator<<Coll::Item as SchemaRead<'de, C>>::Dst>,
Source§impl<Coll, Len, C: ConfigCore> SchemaWrite<C> for FromIntoIterator<Coll, Len>where
Len: SeqLen<C>,
Coll: IntoIterator,
for<'a> &'a Coll: IntoIterator<Item: SchemaWrite<C>, IntoIter: ExactSizeIterator>,
for<'a> <&'a Coll as IntoIterator>::Item: Borrow<<<&'a Coll as IntoIterator>::Item as SchemaWrite<C>>::Src>,
impl<Coll, Len, C: ConfigCore> SchemaWrite<C> for FromIntoIterator<Coll, Len>where
Len: SeqLen<C>,
Coll: IntoIterator,
for<'a> &'a Coll: IntoIterator<Item: SchemaWrite<C>, IntoIter: ExactSizeIterator>,
for<'a> <&'a Coll as IntoIterator>::Item: Borrow<<<&'a Coll as IntoIterator>::Item as SchemaWrite<C>>::Src>,
Auto Trait Implementations§
impl<Coll, Len> Freeze for FromIntoIterator<Coll, Len>
impl<Coll, Len> RefUnwindSafe for FromIntoIterator<Coll, Len>
impl<Coll, Len> Send for FromIntoIterator<Coll, Len>
impl<Coll, Len> Sync for FromIntoIterator<Coll, Len>
impl<Coll, Len> Unpin for FromIntoIterator<Coll, Len>
impl<Coll, Len> UnsafeUnpin for FromIntoIterator<Coll, Len>
impl<Coll, Len> UnwindSafe for FromIntoIterator<Coll, Len>
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
Source§impl<'de, T, C> Deserialize<'de, C> for Twhere
C: Config,
T: SchemaRead<'de, C>,
impl<'de, T, C> Deserialize<'de, C> for Twhere
C: Config,
T: SchemaRead<'de, C>,
Source§fn deserialize(src: &'de [u8], config: C) -> ReadResult<Self::Dst>
fn deserialize(src: &'de [u8], config: C) -> ReadResult<Self::Dst>
Self::Dst.Source§fn deserialize_into(
src: &'de [u8],
dst: &mut MaybeUninit<Self::Dst>,
config: C,
) -> ReadResult<()>
fn deserialize_into( src: &'de [u8], dst: &mut MaybeUninit<Self::Dst>, config: C, ) -> ReadResult<()>
dst.Source§impl<'de, T> Deserialize<'de> for Twhere
T: SchemaRead<'de, Configuration>,
impl<'de, T> Deserialize<'de> for Twhere
T: SchemaRead<'de, Configuration>,
Source§fn deserialize(src: &'de [u8]) -> ReadResult<Self::Dst>
fn deserialize(src: &'de [u8]) -> ReadResult<Self::Dst>
src bytes into a new Self::Dst.Source§fn deserialize_into(
src: &'de [u8],
dst: &mut MaybeUninit<Self::Dst>,
) -> ReadResult<()>
fn deserialize_into( src: &'de [u8], dst: &mut MaybeUninit<Self::Dst>, ) -> ReadResult<()>
src bytes into dst.Source§impl<T> DeserializeOwned for Twhere
T: SchemaReadOwned<Configuration>,
impl<T> DeserializeOwned for Twhere
T: SchemaReadOwned<Configuration>,
Source§fn deserialize_from<'de>(
src: impl Reader<'de>,
) -> ReadResult<<Self as SchemaRead<'de, DefaultConfig>>::Dst>
fn deserialize_from<'de>( src: impl Reader<'de>, ) -> ReadResult<<Self as SchemaRead<'de, DefaultConfig>>::Dst>
Reader into a new Self::Dst.Source§fn deserialize_from_into<'de>(
src: impl Reader<'de>,
dst: &mut MaybeUninit<<Self as SchemaRead<'de, DefaultConfig>>::Dst>,
) -> ReadResult<()>
fn deserialize_from_into<'de>( src: impl Reader<'de>, dst: &mut MaybeUninit<<Self as SchemaRead<'de, DefaultConfig>>::Dst>, ) -> ReadResult<()>
Reader into dst.Source§impl<T, C> DeserializeOwned<C> for Twhere
C: Config,
T: SchemaReadOwned<C>,
impl<T, C> DeserializeOwned<C> for Twhere
C: Config,
T: SchemaReadOwned<C>,
Source§fn deserialize_from<'de>(
src: impl Reader<'de>,
) -> ReadResult<<Self as SchemaRead<'de, C>>::Dst>
fn deserialize_from<'de>( src: impl Reader<'de>, ) -> ReadResult<<Self as SchemaRead<'de, C>>::Dst>
Reader into a new Self::Dst.Source§fn deserialize_from_into<'de>(
src: impl Reader<'de>,
dst: &mut MaybeUninit<<Self as SchemaRead<'de, C>>::Dst>,
) -> ReadResult<()>
fn deserialize_from_into<'de>( src: impl Reader<'de>, dst: &mut MaybeUninit<<Self as SchemaRead<'de, C>>::Dst>, ) -> ReadResult<()>
Reader into dst.impl<T, C> SchemaReadOwned<C> for Twhere
C: ConfigCore,
T: for<'de> SchemaRead<'de, C>,
Source§impl<T> Serialize for T
impl<T> Serialize for T
Source§fn serialize(src: &Self::Src) -> WriteResult<Vec<u8>>
fn serialize(src: &Self::Src) -> WriteResult<Vec<u8>>
Vec of bytes.Source§fn serialize_into(dst: impl Writer, src: &Self::Src) -> WriteResult<()>
fn serialize_into(dst: impl Writer, src: &Self::Src) -> WriteResult<()>
Source§fn serialized_size(src: &Self::Src) -> WriteResult<u64>
fn serialized_size(src: &Self::Src) -> WriteResult<u64>
Source§impl<T, C> Serialize<C> for T
impl<T, C> Serialize<C> for T
Source§fn serialize(src: &Self::Src, config: C) -> WriteResult<Vec<u8>>
fn serialize(src: &Self::Src, config: C) -> WriteResult<Vec<u8>>
Vec of bytes.Source§fn serialize_into(
dst: impl Writer,
src: &Self::Src,
config: C,
) -> WriteResult<()>
fn serialize_into( dst: impl Writer, src: &Self::Src, config: C, ) -> WriteResult<()>
Source§fn serialized_size(src: &Self::Src, config: C) -> WriteResult<u64>
fn serialized_size(src: &Self::Src, config: C) -> WriteResult<u64>
Source§impl<T, Target, C> TagEncoding<C> for Twhere
C: ConfigCore,
T: for<'de> SchemaRead<'de, C, Dst = Target> + SchemaWrite<C, Src = Target> + 'static,
Target: TryFrom<u32>,
u32: TryFrom<Target>,
impl<T, Target, C> TagEncoding<C> for Twhere
C: ConfigCore,
T: for<'de> SchemaRead<'de, C, Dst = Target> + SchemaWrite<C, Src = Target> + 'static,
Target: TryFrom<u32>,
u32: TryFrom<Target>,
type Target = Target
Source§fn try_from_u32(
value: u32,
) -> Result<<T as TagEncoding<C>>::Target, TagEncodingOverflow>
fn try_from_u32( value: u32, ) -> Result<<T as TagEncoding<C>>::Target, TagEncodingOverflow>
u32 to the encoding target.Source§fn try_into_u32(
x: <T as TagEncoding<C>>::Target,
) -> Result<u32, TagEncodingOverflow>
fn try_into_u32( x: <T as TagEncoding<C>>::Target, ) -> Result<u32, TagEncodingOverflow>
u32.Source§fn size_of_from_u32(value: u32) -> WriteResult<usize>
fn size_of_from_u32(value: u32) -> WriteResult<usize>
u32. Read more