diff options
Diffstat (limited to 'src/asn1_types/strings/printablestring.rs')
-rw-r--r-- | src/asn1_types/strings/printablestring.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/asn1_types/strings/printablestring.rs b/src/asn1_types/strings/printablestring.rs new file mode 100644 index 0000000..5cd51fa --- /dev/null +++ b/src/asn1_types/strings/printablestring.rs @@ -0,0 +1,35 @@ +use crate::{asn1_string, TestValidCharset}; +use crate::{Error, Result}; +use alloc::string::String; + +asn1_string!(PrintableString); + +impl<'a> TestValidCharset for PrintableString<'a> { + fn test_valid_charset(i: &[u8]) -> Result<()> { + // Argument must be a reference, because of the .iter().all(F) call below + #[allow(clippy::trivially_copy_pass_by_ref)] + fn is_printable(b: &u8) -> bool { + matches!(*b, + b'a'..=b'z' + | b'A'..=b'Z' + | b'0'..=b'9' + | b' ' + | b'\'' + | b'(' + | b')' + | b'+' + | b',' + | b'-' + | b'.' + | b'/' + | b':' + | b'=' + | b'?') + } + + if !i.iter().all(is_printable) { + return Err(Error::StringInvalidCharset); + } + Ok(()) + } +} |