use bitvec::{
order::Msb0,
ptr::{BitPtr, BitSpanError, Mut},
};
mod sealed {
pub trait Sealed {}
impl Sealed for u8 {}
impl Sealed for bitvec::access::BitSafeU8 {}
}
pub trait BitStore: bitvec::store::BitStore + sealed::Sealed {}
impl BitStore for u8 {}
impl BitStore for bitvec::access::BitSafeU8 {}
pub type BitSlice<O = u8> = bitvec::slice::BitSlice<O, bitvec::order::Msb0>;
pub type BitVec = bitvec::vec::BitVec<u8, bitvec::order::Msb0>;
#[inline]
pub unsafe fn from_raw_parts_mut<'a>(
data: BitPtr<Mut, u8, Msb0>,
len: usize,
) -> Result<&'a mut BitSlice, BitSpanError<u8>> {
bitvec::slice::from_raw_parts_mut::<u8, Msb0>(data, len)
}
#[macro_export]
macro_rules! bits {
($value:expr; $len:expr) => {{
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bits![u8, Msb0; $value; $len])
}};
(mut $value:expr; $len:expr) => {{
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bits![mut u8, Msb0; $value; $len])
}};
(mut $($bit:expr),* $(,)?) => {{
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bits![mut u8, Msb0; $($bit),*])
}};
($($bit:expr),* $(,)?) => {{
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bits![u8, Msb0; $($bit),*])
}};
}
#[macro_export]
macro_rules! bitvec {
($value:expr; $len:expr) => {{
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bitvec!(u8, Msb0; $value; $len))
}};
($($bit:expr),* $(,)?) => {
use $crate::internal::bitvec::order::Msb0;
($crate::internal::bitvec::bitvec!(u8, Msb0; $($bit),*))
};
}