pub mod cc;
pub mod content;
pub mod dublin_core;
pub mod georss;
pub mod media_rss;
pub mod slash;
pub mod syndication;
pub mod threading;
pub mod namespaces {
pub const DUBLIN_CORE: &str = "http://purl.org/dc/elements/1.1/";
pub const CONTENT: &str = "http://purl.org/rss/1.0/modules/content/";
pub const MEDIA: &str = "http://search.yahoo.com/mrss/";
pub const ATOM: &str = "http://www.w3.org/2005/Atom";
pub const RDF: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
pub const RSS_10: &str = "http://purl.org/rss/1.0/";
pub const SYNDICATION: &str = "http://purl.org/rss/1.0/modules/syndication/";
pub const ITUNES: &str = "http://www.itunes.com/dtds/podcast-1.0.dtd";
pub const PODCAST: &str = "https://podcastindex.org/namespace/1.0";
pub const GEORSS: &str = "http://www.georss.org/georss";
pub const GEO: &str = "http://www.w3.org/2003/01/geo/wgs84_pos#";
pub const CC: &str = "http://creativecommons.org/ns#";
pub const CREATIVE_COMMONS: &str = "http://backend.userland.com/creativeCommonsRssModule";
pub const THREADING: &str = "http://purl.org/syndication/thread/1.0";
pub const SLASH: &str = "http://purl.org/rss/1.0/modules/slash/";
pub const WFW: &str = "http://wellformedweb.org/CommentAPI/";
}
pub fn get_namespace_uri(prefix: &str) -> Option<&'static str> {
match prefix {
"dc" => Some(namespaces::DUBLIN_CORE),
"content" => Some(namespaces::CONTENT),
"media" => Some(namespaces::MEDIA),
"atom" => Some(namespaces::ATOM),
"rdf" => Some(namespaces::RDF),
"syn" | "syndication" => Some(namespaces::SYNDICATION),
"itunes" => Some(namespaces::ITUNES),
"podcast" => Some(namespaces::PODCAST),
"georss" => Some(namespaces::GEORSS),
"geo" => Some(namespaces::GEO),
"cc" => Some(namespaces::CC),
"creativeCommons" => Some(namespaces::CREATIVE_COMMONS),
"thr" => Some(namespaces::THREADING),
"slash" => Some(namespaces::SLASH),
"wfw" => Some(namespaces::WFW),
_ => None,
}
}
pub fn get_namespace_prefix(uri: &str) -> Option<&'static str> {
match uri {
namespaces::DUBLIN_CORE => Some("dc"),
namespaces::CONTENT => Some("content"),
namespaces::MEDIA => Some("media"),
namespaces::ATOM => Some("atom"),
namespaces::RDF => Some("rdf"),
namespaces::SYNDICATION => Some("syn"),
namespaces::ITUNES => Some("itunes"),
namespaces::PODCAST => Some("podcast"),
namespaces::GEORSS => Some("georss"),
namespaces::GEO => Some("geo"),
namespaces::CC => Some("cc"),
namespaces::CREATIVE_COMMONS => Some("creativeCommons"),
namespaces::THREADING => Some("thr"),
namespaces::SLASH => Some("slash"),
namespaces::WFW => Some("wfw"),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_namespace_uri() {
assert_eq!(
get_namespace_uri("dc"),
Some("http://purl.org/dc/elements/1.1/")
);
assert_eq!(
get_namespace_uri("content"),
Some("http://purl.org/rss/1.0/modules/content/")
);
assert_eq!(
get_namespace_uri("media"),
Some("http://search.yahoo.com/mrss/")
);
assert_eq!(get_namespace_uri("unknown"), None);
}
#[test]
fn test_get_namespace_prefix() {
assert_eq!(
get_namespace_prefix("http://purl.org/dc/elements/1.1/"),
Some("dc")
);
assert_eq!(
get_namespace_prefix("http://purl.org/rss/1.0/modules/content/"),
Some("content")
);
assert_eq!(
get_namespace_prefix("http://search.yahoo.com/mrss/"),
Some("media")
);
assert_eq!(get_namespace_prefix("http://unknown.example.com/"), None);
}
}