diff options
Diffstat (limited to 'src/site.rs')
-rw-r--r-- | src/site.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/site.rs b/src/site.rs index 3200b58..f1ff333 100644 --- a/src/site.rs +++ b/src/site.rs @@ -21,6 +21,7 @@ pub struct Site { name_queue: Vec<Name>, page_queue: PageSet, whatchanged: HashMap<PathBuf, SystemTime>, + shortcuts: HashMap<String, Shortcut>, } impl Site { @@ -41,6 +42,7 @@ impl Site { name_queue: vec![], page_queue: PageSet::default(), whatchanged: HashMap::new(), + shortcuts: HashMap::new(), } } @@ -267,6 +269,14 @@ impl Site { } false } + + pub fn add_shortcut(&mut self, shortcut: Shortcut) { + self.shortcuts.insert(shortcut.name().into(), shortcut); + } + + pub fn shortcut(&self, name: &str) -> Option<&Shortcut> { + self.shortcuts.get(name) + } } #[derive(Default)] @@ -290,6 +300,35 @@ impl PageSet { } } +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Shortcut { + name: String, + desc: String, + url: String, +} + +impl Shortcut { + pub fn new(name: &str, desc: &str, url: &str) -> Self { + Self { + name: name.into(), + desc: desc.into(), + url: url.into(), + } + } + + pub fn name(&self) -> &str { + &self.name + } + + pub fn desc(&self, arg: &str) -> String { + self.desc.replace("%s", arg) + } + + pub fn url(&self, arg: &str) -> String { + self.url.replace("%s", arg) + } +} + #[cfg(test)] mod test { use super::{NameBuilder, Site, SiteError, WikitextPage}; |