use std::sync::OnceLock;
use std::collections::HashSet;
static KNOWN_PROPERTIES: OnceLock<HashSet<&'static str>> = OnceLock::new();
pub fn get_known_properties() -> &'static HashSet<&'static str> {
KNOWN_PROPERTIES.get_or_init(|| {
let mut set = HashSet::new();
set.insert("post-status");
set.insert("status");
set.insert("mp-post-status");
set.insert("category");
set.insert("mp-category");
set.insert("slug");
set.insert("mp-slug");
set.insert("destination");
set.insert("mp-destination");
set.insert("audience");
set.insert("mp-audience");
set.insert("visibility");
set.insert("mp-visibility");
set.insert("syndicate-to");
set.insert("mp-syndicate-to");
set.insert("channel");
set.insert("mp-channel");
set
})
}
pub fn is_known_property(property: &str) -> bool {
let known = get_known_properties();
known.contains(property) || known.contains(&format!("mp-{}", property).as_str())
}
pub fn is_known_property_with_prefix(property: &str) -> bool {
get_known_properties().contains(property)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_known_properties_lookup() {
assert!(is_known_property("post-status"));
assert!(is_known_property("status"));
assert!(is_known_property("category"));
assert!(is_known_property("slug"));
assert!(is_known_property("destination"));
assert!(is_known_property("audience"));
assert!(is_known_property("visibility"));
assert!(is_known_property("syndicate-to"));
assert!(is_known_property("channel"));
}
#[test]
fn test_mp_prefix_properties() {
assert!(is_known_property("mp-post-status"));
assert!(is_known_property("mp-slug"));
assert!(is_known_property("mp-destination"));
assert!(is_known_property("mp-audience"));
assert!(is_known_property("mp-visibility"));
assert!(is_known_property("mp-syndicate-to"));
assert!(is_known_property("mp-channel"));
}
#[test]
fn test_unknown_properties() {
assert!(!is_known_property("custom-field"));
assert!(!is_known_property("random-property"));
assert!(!is_known_property("content"));
assert!(!is_known_property("name"));
}
#[test]
fn test_prefix_lookup_optimization() {
assert!(is_known_property_with_prefix("post-status"));
assert!(is_known_property_with_prefix("mp-slug"));
assert!(!is_known_property_with_prefix("custom"));
}
#[test]
fn test_known_properties_set_initialization() {
let props = get_known_properties();
assert!(!props.is_empty());
assert!(props.len() > 10); }
}