Trait deku::DekuRead [−][src]
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
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))
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)
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)
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)
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)
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)
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)
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)
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)