parsely_impl/
parsely_read.rs

1use bits_io::prelude::*;
2
3use crate::error::ParselyResult;
4
5pub trait ParselyRead<B, Ctx>: Sized {
6    fn read<T: ByteOrder>(buf: &mut B, ctx: Ctx) -> ParselyResult<Self>;
7}
8
9macro_rules! impl_parsely_read_builtin {
10    ($type:ty) => {
11        impl<B: BitBuf> ParselyRead<B, ()> for $type {
12            fn read<T: ByteOrder>(buf: &mut B, _: ()) -> ParselyResult<Self> {
13                ::paste::paste! {
14                    Ok(buf.[<get_ $type>]()?)
15                }
16            }
17        }
18    };
19}
20
21macro_rules! impl_parsely_read_builtin_bo {
22    ($type:ty) => {
23        impl<B: BitBuf> ParselyRead<B, ()> for $type {
24            fn read<T: ByteOrder>(buf: &mut B, _: ()) -> ParselyResult<Self> {
25                ::paste::paste! {
26                    Ok(buf.[<get_ $type>]::<T>()?)
27                }
28            }
29        }
30    };
31}
32
33impl<B: BitBuf> ParselyRead<B, ()> for bool {
34    fn read<T: ByteOrder>(buf: &mut B, _ctx: ()) -> ParselyResult<Self> {
35        Ok(buf.get_bool()?)
36    }
37}
38
39impl_parsely_read_builtin!(u1);
40impl_parsely_read_builtin!(u2);
41impl_parsely_read_builtin!(u3);
42impl_parsely_read_builtin!(u4);
43impl_parsely_read_builtin!(u5);
44impl_parsely_read_builtin!(u6);
45impl_parsely_read_builtin!(u7);
46impl_parsely_read_builtin!(u8);
47impl_parsely_read_builtin_bo!(u9);
48impl_parsely_read_builtin_bo!(u10);
49impl_parsely_read_builtin_bo!(u11);
50impl_parsely_read_builtin_bo!(u12);
51impl_parsely_read_builtin_bo!(u13);
52impl_parsely_read_builtin_bo!(u14);
53impl_parsely_read_builtin_bo!(u15);
54impl_parsely_read_builtin_bo!(u16);
55impl_parsely_read_builtin_bo!(u17);
56impl_parsely_read_builtin_bo!(u18);
57impl_parsely_read_builtin_bo!(u19);
58impl_parsely_read_builtin_bo!(u20);
59impl_parsely_read_builtin_bo!(u21);
60impl_parsely_read_builtin_bo!(u22);
61impl_parsely_read_builtin_bo!(u23);
62impl_parsely_read_builtin_bo!(u24);
63impl_parsely_read_builtin_bo!(u25);
64impl_parsely_read_builtin_bo!(u26);
65impl_parsely_read_builtin_bo!(u27);
66impl_parsely_read_builtin_bo!(u28);
67impl_parsely_read_builtin_bo!(u29);
68impl_parsely_read_builtin_bo!(u30);
69impl_parsely_read_builtin_bo!(u31);
70impl_parsely_read_builtin_bo!(u32);