pub trait DekuRead<'a, Ctx = ()> {
// Required method
fn read(
input: &'a BitSlice<u8, Msb0>,
ctx: Ctx
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>
where Self: Sized;
}
Expand description
“Reader” trait: read bits and construct type
Required Methods§
sourcefn read(
input: &'a BitSlice<u8, Msb0>,
ctx: Ctx
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where
Self: Sized,
fn read( input: &'a BitSlice<u8, Msb0>, ctx: Ctx ) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where Self: Sized,
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§
source§impl DekuRead<'_, Endian> for NonZeroI64
impl DekuRead<'_, Endian> for NonZeroI64
source§impl<'a, T, Ctx, Predicate> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for Box<[T]>where
T: DekuRead<'a, Ctx>,
Ctx: Copy,
Predicate: FnMut(&T) -> bool,
impl<'a, T, Ctx, Predicate> DekuRead<'a, (Limit<T, Predicate>, Ctx)> for Box<[T]>where T: DekuRead<'a, Ctx>, Ctx: Copy, Predicate: FnMut(&T) -> bool,
source§impl<'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)
source§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)
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)
source§impl DekuRead<'_, ()> for NonZeroU16
impl DekuRead<'_, ()> for NonZeroU16
source§impl DekuRead<'_, ()> for NonZeroI128
impl DekuRead<'_, ()> for NonZeroI128
source§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)
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)
source§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)
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)
source§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)
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)
source§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>
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>
source§fn read(
input: &'a BitSlice<u8, Msb0>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where
Self: Sized,
fn read( input: &'a BitSlice<u8, Msb0>, (limit, inner_ctx): (Limit<T, Predicate>, Ctx) ) -> Result<(&'a BitSlice<u8, Msb0>, 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)
source§impl DekuRead<'_, Endian> for NonZeroI128
impl DekuRead<'_, Endian> for NonZeroI128
source§impl DekuRead<'_, Endian> for NonZeroU32
impl DekuRead<'_, Endian> for NonZeroU32
source§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)
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)
source§impl DekuRead<'_, ()> for NonZeroI64
impl DekuRead<'_, ()> for NonZeroI64
source§impl<'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>
source§fn read(
input: &'a BitSlice<u8, Msb0>,
inner_ctx: Ctx
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where
Self: Sized,
fn read( input: &'a BitSlice<u8, Msb0>, inner_ctx: Ctx ) -> Result<(&'a BitSlice<u8, Msb0>, 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))
source§impl<'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>,
source§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)
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)
source§impl<'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>
source§impl DekuRead<'_, ()> for NonZeroI16
impl DekuRead<'_, ()> for NonZeroI16
source§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)
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)
source§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>
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>
source§impl<'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,
source§impl DekuRead<'_, ()> for NonZeroU32
impl DekuRead<'_, ()> for NonZeroU32
source§impl<'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>
source§fn read(
input: &'a BitSlice<u8, Msb0>,
(limit, inner_ctx): (Limit<T, Predicate>, Ctx)
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where
Self: Sized,
fn read( input: &'a BitSlice<u8, Msb0>, (limit, inner_ctx): (Limit<T, Predicate>, Ctx) ) -> Result<(&'a BitSlice<u8, Msb0>, 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)
source§impl DekuRead<'_, ()> for NonZeroU128
impl DekuRead<'_, ()> for NonZeroU128
source§impl DekuRead<'_, ()> for NonZeroIsize
impl DekuRead<'_, ()> for NonZeroIsize
source§impl DekuRead<'_, Endian> for NonZeroU16
impl DekuRead<'_, Endian> for NonZeroU16
source§impl DekuRead<'_, Endian> for NonZeroI32
impl DekuRead<'_, Endian> for NonZeroI32
source§impl DekuRead<'_, Endian> for NonZeroU64
impl DekuRead<'_, Endian> for NonZeroU64
source§impl<'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>,
source§fn read(
input: &'a BitSlice<u8, Msb0>,
(limit, inner_ctx): (Limit<u8, Predicate>, Ctx)
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>
fn read( input: &'a BitSlice<u8, Msb0>, (limit, inner_ctx): (Limit<u8, Predicate>, Ctx) ) -> Result<(&'a BitSlice<u8, Msb0>, 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)
source§impl DekuRead<'_, ()> for NonZeroI32
impl DekuRead<'_, ()> for NonZeroI32
source§impl DekuRead<'_, Endian> for NonZeroI16
impl DekuRead<'_, Endian> for NonZeroI16
source§impl DekuRead<'_, ()> for NonZeroU64
impl DekuRead<'_, ()> for NonZeroU64
source§impl DekuRead<'_, Endian> for NonZeroU128
impl DekuRead<'_, Endian> for NonZeroU128
source§impl<'a, T: DekuRead<'a> + Eq + Hash, S: BuildHasher + Default, Predicate: FnMut(&T) -> bool> DekuRead<'a, Limit<T, Predicate>> for HashSet<T, S>
impl<'a, T: DekuRead<'a> + Eq + Hash, S: BuildHasher + Default, Predicate: FnMut(&T) -> bool> DekuRead<'a, Limit<T, Predicate>> for HashSet<T, S>
source§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>
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>
source§fn read(
input: &'a BitSlice<u8, Msb0>,
(limit, inner_ctx): (Limit<(K, V), Predicate>, Ctx)
) -> Result<(&'a BitSlice<u8, Msb0>, Self), DekuError>where
Self: Sized,
fn read( input: &'a BitSlice<u8, Msb0>, (limit, inner_ctx): (Limit<(K, V), Predicate>, Ctx) ) -> Result<(&'a BitSlice<u8, Msb0>, 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)