use std::collections::HashMap;
#[derive(Debug, Clone, Default)]
pub struct Metadata {
inner: HashMap<String, String>,
}
impl Metadata {
pub fn new() -> Self {
Self::default()
}
pub fn title(&self) -> Option<&str> {
self.inner.get("title").map(|s| s.as_str())
}
pub fn set_title(&mut self, value: &str) -> &mut Self {
self.inner.insert("title".to_string(), value.to_string());
self
}
pub fn author(&self) -> Option<&str> {
self.inner.get("author").map(|s| s.as_str())
}
pub fn set_author(&mut self, value: &str) -> &mut Self {
self.inner.insert("author".to_string(), value.to_string());
self
}
pub fn subject(&self) -> Option<&str> {
self.inner.get("subject").map(|s| s.as_str())
}
pub fn set_subject(&mut self, value: &str) -> &mut Self {
self.inner.insert("subject".to_string(), value.to_string());
self
}
pub fn keywords(&self) -> Option<&str> {
self.inner.get("keywords").map(|s| s.as_str())
}
pub fn set_keywords(&mut self, value: &str) -> &mut Self {
self.inner.insert("keywords".to_string(), value.to_string());
self
}
pub fn creator(&self) -> Option<&str> {
self.inner.get("creator").map(|s| s.as_str())
}
pub fn set_creator(&mut self, value: &str) -> &mut Self {
self.inner.insert("creator".to_string(), value.to_string());
self
}
pub fn producer(&self) -> Option<&str> {
self.inner.get("producer").map(|s| s.as_str())
}
pub fn set_producer(&mut self, value: &str) -> &mut Self {
self.inner.insert("producer".to_string(), value.to_string());
self
}
pub fn insert(&mut self, key: &str, value: &str) -> &mut Self {
self.inner.insert(key.to_string(), value.to_string());
self
}
pub fn get(&self, key: &str) -> Option<&str> {
self.inner.get(key).map(|s| s.as_str())
}
pub fn iter(&self) -> impl Iterator<Item = (&str, &str)> {
self.inner.iter().map(|(k, v)| (k.as_str(), v.as_str()))
}
}