use a7n_core::clipboard::{IMAGE_PNG, TEXT_HTML, TEXT_PLAIN};
pub(super) const SENSITIVE_MARKER: &str = "x-kde-passwordManagerHint";
pub(super) const HTML_ALIAS: &str = "text/html";
pub(super) const HTML_UTF8_ALIAS: &str = "text/html;charset=utf-8";
const PLAIN_NAMES: [&str; 3] = [TEXT_PLAIN, "text/plain", "UTF8_STRING"];
const HTML_NAMES: [&str; 2] = [HTML_UTF8_ALIAS, HTML_ALIAS];
pub(super) fn names_of(item_mime: &str) -> &'static [&'static str] {
match item_mime {
TEXT_PLAIN => &PLAIN_NAMES,
IMAGE_PNG => &[IMAGE_PNG],
TEXT_HTML => &HTML_NAMES,
_ => &[],
}
}
pub(super) fn item_mime_of(name: &str) -> Option<&'static str> {
[TEXT_PLAIN, TEXT_HTML, IMAGE_PNG]
.into_iter()
.find(|item| names_of(item).contains(&name))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn item_mime_of_aliases_maps_only_supported_names() {
let cases = [
("UTF8_STRING", Some(TEXT_PLAIN)),
("text/plain", Some(TEXT_PLAIN)),
(TEXT_PLAIN, Some(TEXT_PLAIN)),
("text/html", Some(TEXT_HTML)),
(SENSITIVE_MARKER, None),
("image/png", Some(IMAGE_PNG)),
];
for (name, expected) in cases {
let item = item_mime_of(name);
assert_eq!(item, expected, "{name}");
}
}
}