From 25ed132e2ecbd67b2bc3880d8ee665d010d37658 Mon Sep 17 00:00:00 2001 From: "Joshua M. Clulow" Date: Thu, 1 Jul 2021 08:41:42 +0000 Subject: [PATCH] parse path template and generate URL assembly code --- src/template.rs | 143 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/template.rs 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