paperforge-core 0.1.0

PDF-independent core types and abstractions
Documentation
use std::collections::HashMap;

/// Document metadata.
#[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()))
    }
}