diff --git a/src/server/web.rs b/src/server/web.rs index 3cb67d9..dbd0279 100644 --- a/src/server/web.rs +++ b/src/server/web.rs @@ -1,5 +1,6 @@ mod admin; mod api; +mod base; mod commit; mod index; mod link; diff --git a/src/server/web/base.rs b/src/server/web/base.rs new file mode 100644 index 0000000..4628f3b --- /dev/null +++ b/src/server/web/base.rs @@ -0,0 +1,46 @@ +use std::fmt; + +use crate::config::Config; + +pub enum Tab { + None, + Index, + Queue, +} + +#[derive(Clone)] +pub struct Base { + web_base: String, + repo_name: String, + tab: &'static str, +} + +impl Base { + pub fn new(config: &Config, tab: Tab) -> Self { + let tab = match tab { + Tab::None => "", + Tab::Index => "index", + Tab::Queue => "queue", + }; + Self { + web_base: config.web_base.clone(), + repo_name: config.repo_name.clone(), + tab, + } + } + + pub fn link(&self, to: P) -> Link { + let to = format!("{to}"); + assert!(!self.web_base.ends_with('/')); + assert!(to.starts_with('/')); + Link(format!("{}{to}", self.web_base)) + } +} + +pub struct Link(String); + +impl fmt::Display for Link { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +}