asn1_rs/asn1_types/strings/
printablestring.rs

1use crate::{asn1_string, TestValidCharset};
2use crate::{Error, Result};
3#[cfg(not(feature = "std"))]
4use alloc::string::String;
5
6asn1_string!(PrintableString);
7
8impl<'a> TestValidCharset for PrintableString<'a> {
9    fn test_valid_charset(i: &[u8]) -> Result<()> {
10        // Argument must be a reference, because of the .iter().all(F) call below
11        #[allow(clippy::trivially_copy_pass_by_ref)]
12        fn is_printable(b: &u8) -> bool {
13            matches!(*b,
14            b'a'..=b'z'
15            | b'A'..=b'Z'
16            | b'0'..=b'9'
17            | b' '
18            | b'\''
19            | b'('
20            | b')'
21            | b'+'
22            | b','
23            | b'-'
24            | b'.'
25            | b'/'
26            | b':'
27            | b'='
28            | b'?')
29        }
30
31        if !i.iter().all(is_printable) {
32            return Err(Error::StringInvalidCharset);
33        }
34        Ok(())
35    }
36}