diff --git a/src/template.rs b/src/template.rs new file mode 100644 index 0000000..8fdcdc8 --- /dev/null +++ b/src/template.rs @@ -0,0 +1,143 @@ +use anyhow::{Result, bail}; + +#[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!(" {},\n", n)); + } + } + out.push_str(" );\n"); + out + } +} + +pub fn parse(t: &str) -> Result