asn1_codecs/per/uper/decode/
decode_charstrings.rs

1//! Functionality for decoding character strings
2
3use crate::per::common::decode::decode_string_common;
4use crate::{PerCodecData, PerCodecError};
5
6// 27.5.3 and 27.5.4
7/// Decode a VisibleString CharacterString Type.
8pub fn decode_visible_string(
9    data: &mut PerCodecData,
10    lb: Option<i128>,
11    ub: Option<i128>,
12    is_extensible: bool,
13) -> Result<String, PerCodecError> {
14    log::trace!(
15        "decode_visible_string: lb: {:?}, ub: {:?}, is_extensible: {}",
16        lb,
17        ub,
18        is_extensible
19    );
20    decode_string_common(data, lb, ub, is_extensible, 7, false)
21}
22
23/// Decode a PrintableString CharacterString Type.
24pub fn decode_printable_string(
25    data: &mut PerCodecData,
26    lb: Option<i128>,
27    ub: Option<i128>,
28    is_extensible: bool,
29) -> Result<String, PerCodecError> {
30    log::trace!(
31        "decode_printable_string: lb: {:?}, ub: {:?}, is_extensible: {}",
32        lb,
33        ub,
34        is_extensible
35    );
36    decode_string_common(data, lb, ub, is_extensible, 7, false)
37}
38
39// UTF-8 String is always - indefinite length case as it's not a fixed character width string. It's
40// almost like decoding an octet string.
41// 27.6
42/// Decode a UTF8String CharacterString Type.
43pub fn decode_utf8_string(
44    data: &mut PerCodecData,
45    lb: Option<i128>,
46    ub: Option<i128>,
47    is_extensible: bool,
48) -> Result<String, PerCodecError> {
49    log::trace!(
50        "decode_utf8_string: lb: {:?}, ub: {:?}, is_extensible: {}",
51        lb,
52        ub,
53        is_extensible
54    );
55    decode_string_common(data, lb, ub, is_extensible, 8, false)
56}
57
58// UTCTime is like UTF8 String
59// almost like decoding an octet string.
60// 27.6
61/// Decode a UTCTime Type
62pub fn decode_utc_time(
63    data: &mut PerCodecData,
64    lb: Option<i128>,
65    ub: Option<i128>,
66    is_extensible: bool,
67) -> Result<String, PerCodecError> {
68    log::trace!(
69        "decode_utc_time: lb: {:?}, ub: {:?}, is_extensible: {}",
70        lb,
71        ub,
72        is_extensible
73    );
74    decode_string_common(data, lb, ub, is_extensible, 8, false)
75}