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}