tlbits/as/
remainder.rs

1use std::borrow::Cow;
2
3use bitvec::{order::Msb0, slice::BitSlice, vec::BitVec};
4
5use crate::{
6    r#as::BorrowCow,
7    de::{BitReader, BitReaderExt, r#as::BitUnpackAs},
8};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
11pub struct Remainder;
12
13impl<'de: 'a, 'a> BitUnpackAs<'de, Cow<'a, BitSlice<u8, Msb0>>> for Remainder {
14    #[inline]
15    fn unpack_as<R>(mut reader: R) -> Result<Cow<'a, BitSlice<u8, Msb0>>, R::Error>
16    where
17        R: BitReader<'de>,
18    {
19        let n = reader.bits_left();
20        reader.unpack_as_with::<_, BorrowCow>(n)
21    }
22}
23
24impl<'de> BitUnpackAs<'de, BitVec<u8, Msb0>> for Remainder {
25    #[inline]
26    fn unpack_as<R>(mut reader: R) -> Result<BitVec<u8, Msb0>, R::Error>
27    where
28        R: BitReader<'de>,
29    {
30        reader
31            .unpack_as::<Cow<BitSlice<u8, Msb0>>, Self>()
32            .map(Cow::into_owned)
33    }
34}
35
36impl<'de: 'a, 'a> BitUnpackAs<'de, Cow<'a, [u8]>> for Remainder {
37    #[inline]
38    fn unpack_as<R>(mut reader: R) -> Result<Cow<'a, [u8]>, R::Error>
39    where
40        R: BitReader<'de>,
41    {
42        let n = reader.bits_left();
43        reader.unpack_as_with::<_, BorrowCow>(n)
44    }
45}
46
47impl<'de> BitUnpackAs<'de, Vec<u8>> for Remainder {
48    #[inline]
49    fn unpack_as<R>(mut reader: R) -> Result<Vec<u8>, R::Error>
50    where
51        R: BitReader<'de>,
52    {
53        reader.unpack_as::<Cow<[u8]>, Self>().map(Cow::into_owned)
54    }
55}
56
57impl<'de: 'a, 'a> BitUnpackAs<'de, Cow<'a, str>> for Remainder {
58    #[inline]
59    fn unpack_as<R>(mut reader: R) -> Result<Cow<'a, str>, R::Error>
60    where
61        R: BitReader<'de>,
62    {
63        let n = reader.bits_left();
64        reader.unpack_as_with::<_, BorrowCow>(n)
65    }
66}
67
68impl<'de> BitUnpackAs<'de, String> for Remainder {
69    #[inline]
70    fn unpack_as<R>(mut reader: R) -> Result<String, R::Error>
71    where
72        R: BitReader<'de>,
73    {
74        reader.unpack_as::<Cow<str>, Self>().map(Cow::into_owned)
75    }
76}