pub struct DiscardSeq<T, Len>(/* private fields */);Expand description
Discards a length-prefixed sequence: reads the length (encoded per Len) and
steps over every element with the element schema T, advancing the reader
exactly as decoding the sequence would, yet never allocates a backing buffer and
always yields an empty Vec.
Every wincode sequence — Vec, String, slices, sets, and maps — shares the
same length prefix + elements wire layout, so this discards any of them;
T only names one element’s wire form:
- a
Vec<u32>:DiscardSeq<u32, Len>; - a
String:DiscardSeq<u8, Len>(identical bytes to aVec<u8>); - a map such as
HashMap<K, V>/BTreeMap<K, V>:DiscardSeq<(K, V), Len>, since each entry is encoded as a(K, V)pair; - nested sequences, with no allocation at any level:
DiscardSeq<DiscardSeq<u8, L2>, L1>for aVec<Vec<u8>>.
The produced value is always an empty Vec<T::Dst>, and that type is
incidental. Deprecating a field is then just repointing it at DiscardSeq and
changing its type to the matching Vec<…>: the field is dead, so its concrete
collection type no longer matters — only that the bytes are consumed and the
stream stays aligned.
The length prefix is still validated against the configured preallocation limit, so a hostile length errors out identically to a real read.
Like Discard, the sequence held in the instance is ignored on write and an
empty sequence is emitted, matching what read reconstructs. Use the
configuration’s default length encoding, e.g.
BincodeLen, to match how the field was originally
encoded.
#[derive(SchemaWrite, SchemaRead, Debug, PartialEq)]
struct Full {
data: Vec<u32>,
tag: u8,
}
#[derive(SchemaWrite, SchemaRead, Debug, PartialEq)]
struct Partial {
#[wincode(with = "DiscardSeq<u32, BincodeLen>")]
data: Vec<u32>,
tag: u8,
}
// On read, `data` is stepped over and reset to an empty `Vec`.
let bytes = wincode::serialize(&Full { data: vec![1, 2, 3], tag: 42 }).unwrap();
assert_eq!(
wincode::deserialize::<Partial>(&bytes).unwrap(),
Partial { data: Vec::new(), tag: 42 },
);
// On write, `data` is discarded and an empty sequence is serialized, so the
// output matches a `Full` with empty `data`.
let out = wincode::serialize(&Partial { data: vec![1, 2, 3], tag: 42 }).unwrap();
assert_eq!(out, wincode::serialize(&Full { data: vec![], tag: 42 }).unwrap());Trait Implementations§
Source§impl<'de, C, T, Len> SchemaRead<'de, C> for DiscardSeq<T, Len>
Available on crate feature alloc only.
impl<'de, C, T, Len> SchemaRead<'de, C> for DiscardSeq<T, Len>
alloc only.Source§impl<C, T, Len> SchemaWrite<C> for DiscardSeq<T, Len>
Available on crate feature alloc only.
impl<C, T, Len> SchemaWrite<C> for DiscardSeq<T, Len>
alloc only.Auto Trait Implementations§
impl<T, Len> Freeze for DiscardSeq<T, Len>
impl<T, Len> RefUnwindSafe for DiscardSeq<T, Len>
impl<T, Len> Send for DiscardSeq<T, Len>
impl<T, Len> Sync for DiscardSeq<T, Len>
impl<T, Len> Unpin for DiscardSeq<T, Len>
impl<T, Len> UnsafeUnpin for DiscardSeq<T, Len>
impl<T, Len> UnwindSafe for DiscardSeq<T, 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.