rasn/types/strings/
bit.rs1use crate::error::DecodeError;
2use crate::prelude::*;
3pub type BitString = bitvec::vec::BitVec<u8, bitvec::order::Msb0>;
18pub type FixedBitString<const N: usize> = bitvec::array::BitArray<[u8; N], bitvec::order::Msb0>;
20pub type BitStr = bitvec::slice::BitSlice<u8, bitvec::order::Msb0>;
22
23impl AsnType for BitString {
24 const TAG: Tag = Tag::BIT_STRING;
25}
26
27impl Decode for BitString {
28 fn decode_with_tag_and_constraints<D: Decoder>(
29 decoder: &mut D,
30 tag: Tag,
31 constraints: Constraints,
32 ) -> Result<Self, D::Error> {
33 decoder.decode_bit_string(tag, constraints)
34 }
35}
36
37impl Encode for BitString {
38 fn encode_with_tag_and_constraints<E: Encoder>(
39 &self,
40 encoder: &mut E,
41 tag: Tag,
42 constraints: Constraints,
43 ) -> Result<(), E::Error> {
44 encoder.encode_bit_string(tag, constraints, self).map(drop)
45 }
46}
47
48impl AsnType for BitStr {
49 const TAG: Tag = Tag::BIT_STRING;
50}
51
52impl Encode for BitStr {
53 fn encode_with_tag_and_constraints<E: Encoder>(
54 &self,
55 encoder: &mut E,
56 tag: Tag,
57 constraints: Constraints,
58 ) -> Result<(), E::Error> {
59 encoder.encode_bit_string(tag, constraints, self).map(drop)
60 }
61}
62
63impl<const N: usize> AsnType for FixedBitString<N> {
64 const TAG: Tag = Tag::BIT_STRING;
65}
66
67impl<const N: usize> Decode for FixedBitString<N> {
68 fn decode_with_tag_and_constraints<D: Decoder>(
69 decoder: &mut D,
70 tag: Tag,
71 constraints: Constraints,
72 ) -> Result<Self, D::Error> {
73 let out = decoder.decode_bit_string(tag, constraints)?;
74 out.as_bitslice().try_into().map_err(|_| {
75 D::Error::from(DecodeError::fixed_string_conversion_failed(
76 Tag::BIT_STRING,
77 out.as_bitslice().len(),
78 N,
79 decoder.codec(),
80 ))
81 })
82 }
83}
84
85impl<const N: usize> Encode for FixedBitString<N> {
86 fn encode_with_tag_and_constraints<E: Encoder>(
87 &self,
88 encoder: &mut E,
89 tag: Tag,
90 constraints: Constraints,
91 ) -> Result<(), E::Error> {
92 encoder.encode_bit_string(tag, constraints, self).map(drop)
93 }
94}