use anyhow::{anyhow, bail, Context, Result}; #[derive(Eq, PartialEq, Clone, Debug)] enum Component { Constant(String), Parameter(String), } #[derive(Eq, PartialEq, Clone, Debug)] pub struct Template { components: Vec, } impl Template { pub fn compile(&self) -> String { let mut out = " let url = format!(\"{}".to_string(); for c in self.components.iter() { out.push('/'); match c { Component::Constant(n) => out.push_str(n), Component::Parameter(_) => out.push_str("{}"), } } out.push_str("\",\n"); out.push_str(" self.baseurl,\n"); for c in self.components.iter() { if let Component::Parameter(n) = &c { out.push_str(&format!(" \ progenitor_support::encode_path({}),\n", n)); } } out.push_str(" );\n"); out } } pub fn parse(t: &str) -> Result