parsely_impl/
parsely_read.rs

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