pub trait DekuRead<'a, Ctx = ()> {
fn read(
input: &'a BitSlice<Msb0, u8>,
ctx: Ctx
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError>
where
Self: Sized;
}
Expand description
“Reader” trait: read bits and construct type
Required Methods
Read bits and construct type
- input - Input as bits
- ctx - A context required by context-sensitive reading. A unit type
()
means no context needed.
Returns the remaining bits after parsing in addition to Self.
Implementations on Foreign Types
sourceimpl DekuRead<'_, ()> for NonZeroU16
impl DekuRead<'_, ()> for NonZeroU16
sourceimpl DekuRead<'_, Endian> for NonZeroU16
impl DekuRead<'_, Endian> for NonZeroU16
sourceimpl DekuRead<'_, Size> for NonZeroU16
impl DekuRead<'_, Size> for NonZeroU16
sourceimpl DekuRead<'_, ()> for NonZeroU32
impl DekuRead<'_, ()> for NonZeroU32
sourceimpl DekuRead<'_, Endian> for NonZeroU32
impl DekuRead<'_, Endian> for NonZeroU32
sourceimpl DekuRead<'_, Size> for NonZeroU32
impl DekuRead<'_, Size> for NonZeroU32
sourceimpl DekuRead<'_, ()> for NonZeroU64
impl DekuRead<'_, ()> for NonZeroU64
sourceimpl DekuRead<'_, Endian> for NonZeroU64
impl DekuRead<'_, Endian> for NonZeroU64
sourceimpl DekuRead<'_, Size> for NonZeroU64
impl DekuRead<'_, Size> for NonZeroU64
sourceimpl DekuRead<'_, ()> for NonZeroU128
impl DekuRead<'_, ()> for NonZeroU128
sourceimpl DekuRead<'_, Endian> for NonZeroU128
impl DekuRead<'_, Endian> for NonZeroU128
sourceimpl DekuRead<'_, Size> for NonZeroU128
impl DekuRead<'_, Size> for NonZeroU128
sourceimpl DekuRead<'_, ()> for NonZeroUsize
impl DekuRead<'_, ()> for NonZeroUsize
sourceimpl DekuRead<'_, Endian> for NonZeroUsize
impl DekuRead<'_, Endian> for NonZeroUsize
sourceimpl DekuRead<'_, Size> for NonZeroUsize
impl DekuRead<'_, Size> for NonZeroUsize
sourceimpl DekuRead<'_, ()> for NonZeroI16
impl DekuRead<'_, ()> for NonZeroI16
sourceimpl DekuRead<'_, Endian> for NonZeroI16
impl DekuRead<'_, Endian> for NonZeroI16
sourceimpl DekuRead<'_, Size> for NonZeroI16
impl DekuRead<'_, Size> for NonZeroI16
sourceimpl DekuRead<'_, ()> for NonZeroI32
impl DekuRead<'_, ()> for NonZeroI32
sourceimpl DekuRead<'_, Endian> for NonZeroI32
impl DekuRead<'_, Endian> for NonZeroI32
sourceimpl DekuRead<'_, Size> for NonZeroI32
impl DekuRead<'_, Size> for NonZeroI32
sourceimpl DekuRead<'_, ()> for NonZeroI64
impl DekuRead<'_, ()> for NonZeroI64
sourceimpl DekuRead<'_, Endian> for NonZeroI64
impl DekuRead<'_, Endian> for NonZeroI64
sourceimpl DekuRead<'_, Size> for NonZeroI64
impl DekuRead<'_, Size> for NonZeroI64
sourceimpl DekuRead<'_, ()> for NonZeroI128
impl DekuRead<'_, ()> for NonZeroI128
sourceimpl DekuRead<'_, Endian> for NonZeroI128
impl DekuRead<'_, Endian> for NonZeroI128
sourceimpl DekuRead<'_, Size> for NonZeroI128
impl DekuRead<'_, Size> for NonZeroI128
sourceimpl DekuRead<'_, ()> for NonZeroIsize
impl DekuRead<'_, ()> for NonZeroIsize
sourceimpl DekuRead<'_, Endian> for NonZeroIsize
impl DekuRead<'_, Endian> for NonZeroIsize
sourceimpl DekuRead<'_, Size> for NonZeroIsize
impl DekuRead<'_, Size> for NonZeroIsize
sourceimpl<'a, T: DekuRead<'a, Ctx>, Ctx: Copy> DekuRead<'a, Ctx> for Option<T>
impl<'a, T: DekuRead<'a, Ctx>, Ctx: Copy> DekuRead<'a, Ctx> for Option<T>
sourcefn read(
input: &'a BitSlice<Msb0, u8>,
inner_ctx: Ctx
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
fn read(
input: &'a BitSlice<Msb0, u8>,
inner_ctx: Ctx
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
Read a T from input and store as Some(T)
inner_ctx
- The context required byT
. It will be passed to everyT
s when constructing.
Examples
let input = vec![1u8, 2, 3, 4];
let (rest, v) = Option::<u32>::read(input.view_bits(), Endian::Little).unwrap();
assert!(rest.is_empty());
assert_eq!(v, Some(0x04030201))
sourceimpl<'a, Ctx: Copy, Predicate: FnMut(&u8) -> bool> DekuRead<'a, (Limit<u8, Predicate>, Ctx)> for &'a [u8] where
u8: DekuRead<'a, Ctx>,
impl<'a, Ctx: Copy, Predicate: FnMut(&u8) -> bool> DekuRead<'a, (Limit<u8, Predicate>, Ctx)> for &'a [u8] where
u8: DekuRead<'a, Ctx>,
sourcefn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<u8, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError>
fn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<u8, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError>
Read u8
s until the given limit
limit
- the limiting factor on the amount ofu8
s to readinner_ctx
- The context required byu8
. It will be passed to everyu8
s when constructing.
Examples
let input = vec![1u8, 2, 3, 4];
let (rest, v) = <&[u8]>::read(input.view_bits(), (4.into(), Endian::Little)).unwrap();
assert!(rest.is_empty());
assert_eq!(&[1u8, 2, 3, 4], v)
sourceimpl<'a, Ctx: Copy, T, const N: usize> DekuRead<'a, Ctx> for [T; N] where
T: DekuRead<'a, Ctx>,
impl<'a, Ctx: Copy, T, const N: usize> DekuRead<'a, Ctx> for [T; N] where
T: DekuRead<'a, Ctx>,
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized, J: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I, J)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized, J: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I, J)
sourceimpl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized, J: DekuRead<'a, Ctx> + Sized, K: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I, J, K)
impl<'a, Ctx: Copy, A: DekuRead<'a, Ctx> + Sized, B: DekuRead<'a, Ctx> + Sized, C: DekuRead<'a, Ctx> + Sized, D: DekuRead<'a, Ctx> + Sized, E: DekuRead<'a, Ctx> + Sized, F: DekuRead<'a, Ctx> + Sized, G: DekuRead<'a, Ctx> + Sized, H: DekuRead<'a, Ctx> + Sized, I: DekuRead<'a, Ctx> + Sized, J: DekuRead<'a, Ctx> + Sized, K: DekuRead<'a, Ctx> + Sized> DekuRead<'a, Ctx> for (A, B, C, D, E, F, G, H, I, J, K)
sourceimpl<'a, T: DekuRead<'a, Ctx>, Ctx: Copy, Predicate: FnMut(&T) -> bool> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for Vec<T>
impl<'a, T: DekuRead<'a, Ctx>, Ctx: Copy, Predicate: FnMut(&T) -> bool> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for Vec<T>
sourcefn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
fn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
Read T
s until the given limit
limit
- the limiting factor on the amount ofT
s to readinner_ctx
- The context required byT
. It will be passed to everyT
s when constructing.
Examples
let input = vec![1u8, 2, 3, 4];
let (rest, v) = Vec::<u32>::read(input.view_bits(), (1.into(), Endian::Little)).unwrap();
assert!(rest.is_empty());
assert_eq!(vec![0x04030201], v)
sourceimpl<'a, T: DekuRead<'a>, Predicate: FnMut(&T) -> bool> DekuRead<'a, Limit<T, Predicate>> for Vec<T>
impl<'a, T: DekuRead<'a>, Predicate: FnMut(&T) -> bool> DekuRead<'a, Limit<T, Predicate>> for Vec<T>
sourceimpl<'a, T, Ctx> DekuRead<'a, Ctx> for Cow<'a, T> where
T: DekuRead<'a, Ctx> + Clone,
Ctx: Copy,
impl<'a, T, Ctx> DekuRead<'a, Ctx> for Cow<'a, T> where
T: DekuRead<'a, Ctx> + Clone,
Ctx: Copy,
sourceimpl<'a, K: DekuRead<'a, Ctx> + Eq + Hash, V: DekuRead<'a, Ctx>, S: BuildHasher + Default, Ctx: Copy, Predicate: FnMut(&(K, V)) -> bool> DekuRead<'a, (Limit<(K, V), Predicate>, Ctx)> for HashMap<K, V, S>
impl<'a, K: DekuRead<'a, Ctx> + Eq + Hash, V: DekuRead<'a, Ctx>, S: BuildHasher + Default, Ctx: Copy, Predicate: FnMut(&(K, V)) -> bool> DekuRead<'a, (Limit<(K, V), Predicate>, Ctx)> for HashMap<K, V, S>
sourcefn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<(K, V), Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
fn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<(K, V), Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
Read K, V
s until the given limit
limit
- the limiting factor on the amount ofK, V
s to readinner_ctx
- The context required byK, V
. It will be passed to everyK, V
s when constructing.
Examples
let input: Vec<u8> = vec![100, 1, 2, 3, 4];
let (rest, map) = HashMap::<u8, u32>::read(input.view_bits(), (1.into(), Endian::Little)).unwrap();
assert!(rest.is_empty());
let mut expected = HashMap::<u8, u32>::default();
expected.insert(100, 0x04030201);
assert_eq!(expected, map)
sourceimpl<'a, K: DekuRead<'a> + Eq + Hash, V: DekuRead<'a>, S: BuildHasher + Default, Predicate: FnMut(&(K, V)) -> bool> DekuRead<'a, Limit<(K, V), Predicate>> for HashMap<K, V, S>
impl<'a, K: DekuRead<'a> + Eq + Hash, V: DekuRead<'a>, S: BuildHasher + Default, Predicate: FnMut(&(K, V)) -> bool> DekuRead<'a, Limit<(K, V), Predicate>> for HashMap<K, V, S>
sourceimpl<'a, T: DekuRead<'a, Ctx> + Eq + Hash, S: BuildHasher + Default, Ctx: Copy, Predicate: FnMut(&T) -> bool> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for HashSet<T, S>
impl<'a, T: DekuRead<'a, Ctx> + Eq + Hash, S: BuildHasher + Default, Ctx: Copy, Predicate: FnMut(&T) -> bool> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for HashSet<T, S>
sourcefn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
fn read(
input: &'a BitSlice<Msb0, u8>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<Msb0, u8>, Self), DekuError> where
Self: Sized,
Read T
s until the given limit
limit
- the limiting factor on the amount ofT
s to readinner_ctx
- The context required byT
. It will be passed to everyT
s when constructing.
Examples
let input = vec![1u8, 2, 3, 4];
let expected: HashSet<u32> = vec![0x04030201].into_iter().collect();
let (rest, set) = HashSet::<u32>::read(input.view_bits(), (1.into(), Endian::Little)).unwrap();
assert!(rest.is_empty());
assert_eq!(expected, set)