///|
/// The Dublin Core namespace.
pub const DUBLIN_CORE_NAMESPACE : String = "http://purl.org/dc/elements/1.1/"
///|
/// Dublin Core metadata extracted from a channel or item.
///
/// Every field is a list because Dublin Core elements are repeatable.
pub(all) struct DublinCoreExtension {
contributors : Array[String]
coverages : Array[String]
creators : Array[String]
dates : Array[String]
descriptions : Array[String]
formats : Array[String]
identifiers : Array[String]
languages : Array[String]
publishers : Array[String]
relations : Array[String]
rights : Array[String]
sources : Array[String]
subjects : Array[String]
titles : Array[String]
types : Array[String]
} derive(Debug, Eq)
///|
/// Build a Dublin Core extension from parsed generic extensions,
/// mirroring `DublinCoreExtension::from_map`.
pub fn DublinCoreExtension::from_map(
map : Map[String, Array[Extension]],
) -> DublinCoreExtension {
fn values(key : String) -> Array[String] {
match map.get(key) {
Some(list) => {
let out : Array[String] = []
for ext in list {
if ext.value is Some(value) {
out.push(value)
}
}
out
}
None => []
}
}
{
contributors: values("contributor"),
coverages: values("coverage"),
creators: values("creator"),
dates: values("date"),
descriptions: values("description"),
formats: values("format"),
identifiers: values("identifier"),
languages: values("language"),
publishers: values("publisher"),
relations: values("relation"),
rights: values("rights"),
sources: values("source"),
subjects: values("subject"),
titles: values("title"),
types: values("type"),
}
}