#![doc = include_str!("../README.md")]
use std::fmt;
use uuid::Uuid;
mod critical;
mod form;
mod gzip;
mod identity;
#[cfg(test)]
mod ietf_examples;
mod json;
pub mod read;
mod signed;
pub mod write;
#[must_use]
pub fn parse_uuid(text: &str) -> Option<Uuid> {
identity::parse_uuid_text(text).ok()
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Form {
Unsigned,
Signed,
Encrypted,
}
impl Form {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Form::Unsigned => "unsigned",
Form::Signed => "signed",
Form::Encrypted => "encrypted",
}
}
}
impl fmt::Display for Form {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(doctest)]
pub struct NoCrateName;
#[cfg(test)]
mod tests {
use super::Form;
#[test]
fn each_form_has_its_lower_case_name() {
let names = [
(Form::Unsigned, "unsigned"),
(Form::Signed, "signed"),
(Form::Encrypted, "encrypted"),
];
for (form, name) in names {
assert_eq!(
form.as_str(),
name,
"as_str gives the form's name in lower case: {form:?}"
);
assert_eq!(
form.to_string(),
name,
"Display writes what as_str gives: {form:?}"
);
}
}
}