1use bitvec::{
2 order::Msb0,
3 ptr::{BitPtr, BitSpanError, Mut},
4};
5
6mod sealed {
11 pub trait Sealed {}
12 impl Sealed for u8 {}
13 impl Sealed for bitvec::access::BitSafeU8 {}
14}
15
16pub trait BitStore: bitvec::store::BitStore + sealed::Sealed {}
21
22impl BitStore for u8 {}
23impl BitStore for bitvec::access::BitSafeU8 {}
24
25pub type BitSlice<O = u8> = bitvec::slice::BitSlice<O, bitvec::order::Msb0>;
26
27pub type BitVec = bitvec::vec::BitVec<u8, bitvec::order::Msb0>;
28
29#[inline]
43pub unsafe fn from_raw_parts_mut<'a>(
44 data: BitPtr<Mut, u8, Msb0>,
45 len: usize,
46) -> Result<&'a mut BitSlice, BitSpanError<u8>> {
47 bitvec::slice::from_raw_parts_mut::<u8, Msb0>(data, len)
48}
49
50#[macro_export]
54macro_rules! bits {
55 ($value:expr; $len:expr) => {{
56 use $crate::internal::bitvec::order::Msb0;
57 ($crate::internal::bitvec::bits![u8, Msb0; $value; $len])
58 }};
59 (mut $value:expr; $len:expr) => {{
60 use $crate::internal::bitvec::order::Msb0;
61 ($crate::internal::bitvec::bits![mut u8, Msb0; $value; $len])
62 }};
63 (mut $($bit:expr),* $(,)?) => {{
64 use $crate::internal::bitvec::order::Msb0;
65 ($crate::internal::bitvec::bits![mut u8, Msb0; $($bit),*])
66 }};
67 ($($bit:expr),* $(,)?) => {{
68 use $crate::internal::bitvec::order::Msb0;
69 ($crate::internal::bitvec::bits![u8, Msb0; $($bit),*])
70 }};
71}
72
73#[macro_export]
74macro_rules! bitvec {
75 ($value:expr; $len:expr) => {{
77 use $crate::internal::bitvec::order::Msb0;
78 ($crate::internal::bitvec::bitvec!(u8, Msb0; $value; $len))
79 }};
80 ($($bit:expr),* $(,)?) => {
82 use $crate::internal::bitvec::order::Msb0;
83 ($crate::internal::bitvec::bitvec!(u8, Msb0; $($bit),*))
84 };
85}