use url::Url; #[derive(Debug, Clone)] pub struct UptimeKumaEndpoints { base_url: Url, slug: String, } impl UptimeKumaEndpoints { pub fn new(base_url: &str, slug: &str) -> Result { let base_url = Url::parse(base_url.trim_end_matches("/"))?; Ok(Self { base_url, slug: slug.to_string(), }) } pub fn heartbeat_url(&self) -> String { let mut url = self.get_url(); url.path_segments_mut() .unwrap() .push("heartbeat") .push(&self.slug); url.to_string() } pub fn status_page_url(&self) -> String { let mut url = self.get_url(); url.path_segments_mut() .unwrap() .push(&self.slug); url.to_string() } fn get_url(&self) -> Url { let mut url = self.base_url.clone(); url.path_segments_mut() .unwrap() .push("api") .push("status-page"); url } }