pub(crate) fn standard(method: &str) -> Option<String> {
(method == method.to_ascii_uppercase()).then(|| method.to_ascii_lowercase())
}
pub(crate) fn from_standard_key(key: &str) -> String {
key.to_ascii_uppercase()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn an_uppercase_standard_method_maps_to_its_lowercase_key() {
assert_eq!(standard("GET").as_deref(), Some("get"));
assert_eq!(standard("DELETE").as_deref(), Some("delete"));
}
#[test]
fn a_method_that_is_not_uppercase_names_no_standard_operation() {
assert_eq!(standard("get"), None);
assert_eq!(standard("GeT"), None);
assert_eq!(standard("Get"), None);
}
#[test]
fn a_standard_key_names_the_method_it_stands_for() {
assert_eq!(from_standard_key("get"), "GET");
assert_eq!(from_standard_key("delete"), "DELETE");
}
#[test]
fn a_non_standard_method_is_left_for_additional_operations() {
assert_eq!(standard("COPY").as_deref(), Some("copy"));
}
}