rss/extension/
dublincore.rs

1use std::collections::HashMap;
2
3use extension::Extension;
4use extension::remove_extension_values;
5
6/// A Dublin Core element extension.
7#[derive(Debug, Default, Clone, PartialEq)]
8pub struct DublinCoreExtension {
9    /// An entity responsible for making contributions to the resource.
10    pub contributor: Option<Vec<String>>,
11    /// The spatial or temporal topic of the resource, the spatial applicability of the resource,
12    /// or the jurisdiction under which the resource is relevant.
13    pub coverage: Option<Vec<String>>,
14    /// An entity primarily responsible for making the resource.
15    pub creator: Option<Vec<String>>,
16    /// A point or period of time associated with an event in the lifecycle of the resource.
17    pub date: Option<Vec<String>>,
18    /// An account of the resource.
19    pub description: Option<Vec<String>>,
20    /// The file format, physical medium, or dimensions of the resource.
21    pub format: Option<Vec<String>>,
22    /// An unambiguous reference to the resource within a given context.
23    pub identifier: Option<Vec<String>>,
24    /// A language of the resource.
25    pub language: Option<Vec<String>>,
26    /// An entity responsible for making the resource available.
27    pub publisher: Option<Vec<String>>,
28    /// A related resource.
29    pub relation: Option<Vec<String>>,
30    /// Information about rights held in and over the resource.
31    pub rights: Option<Vec<String>>,
32    /// A related resource from which the described resource is derived.
33    pub source: Option<Vec<String>>,
34    /// The topic of the resource.
35    pub subject: Option<Vec<String>>,
36    /// A name given to the resource.
37    pub title: Option<Vec<String>>,
38    /// The nature or genre of the resource.
39    pub resource_type: Option<Vec<String>>,
40}
41
42impl DublinCoreExtension {
43    /// Creates a DublinCoreExtension using the specified hashmap.
44    pub fn from_map(mut map: HashMap<String, Vec<Extension>>) -> Self {
45        let mut ext = DublinCoreExtension::default();
46        ext.contributor = remove_extension_values(&mut map, "contributor");
47        ext.coverage = remove_extension_values(&mut map, "coverage");
48        ext.creator = remove_extension_values(&mut map, "creator");
49        ext.date = remove_extension_values(&mut map, "date");
50        ext.description = remove_extension_values(&mut map, "description");
51        ext.format = remove_extension_values(&mut map, "format");
52        ext.identifier = remove_extension_values(&mut map, "identifier");
53        ext.language = remove_extension_values(&mut map, "language");
54        ext.publisher = remove_extension_values(&mut map, "publisher");
55        ext.relation = remove_extension_values(&mut map, "relation");
56        ext.rights = remove_extension_values(&mut map, "rights");
57        ext.source = remove_extension_values(&mut map, "source");
58        ext.subject = remove_extension_values(&mut map, "subject");
59        ext.title = remove_extension_values(&mut map, "title");
60        ext.resource_type = remove_extension_values(&mut map, "type");
61        ext
62    }
63}