From 18e35184a53925209696d3dae957d3d4045bada6 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 13 Aug 2023 19:53:49 +0200 Subject: [PATCH] Prepare more type-safe linking --- src/server/web.rs | 1 + src/server/web/base.rs | 46 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/server/web/base.rs 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) + } +}