From 4a11fd2bd6329af21f8a3c60d70afc973f6518a4 Mon Sep 17 00:00:00 2001 From: Stanisław Zagórowski Date: Fri, 12 Jan 2024 20:28:42 +0100 Subject: enough to run my website --- src/luax/mod.rs | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'src/luax/mod.rs') diff --git a/src/luax/mod.rs b/src/luax/mod.rs index 1a3db12..ddbb2ef 100644 --- a/src/luax/mod.rs +++ b/src/luax/mod.rs @@ -9,13 +9,22 @@ mod tests; mod tokens; pub fn table_to_html(table: rlua::Table, f: &mut W) -> Result<()> { - let type_name: Option = table.get("tag").unwrap(); + let tag_name: Option = table.get("tag").unwrap(); + + if tag_name.is_none() { + // we might be in a list + for child in table.sequence_values::() { + match child? { + rlua::Value::Table(child) => table_to_html(child, f)?, + rlua::Value::String(s) => write!(f, "{}", s.to_str()?)?, + _ => return Err(LuaXError::NonTableChildren.into()), + } + } - if type_name.is_none() { - return Err(LuaXError::MissingField("tag".to_string()).into()); + return Ok(()); } - let type_name = type_name.unwrap(); + let type_name = tag_name.unwrap(); write!(f, "<{}", type_name)?; let mut children = None; @@ -69,7 +78,13 @@ pub fn preprocess(s: &str) -> Result { let mut buf = Vec::new(); let preprocessor = preprocessor::Preprocessor::new(s, &mut buf)?; - preprocessor.preprocess()?; + match preprocessor.preprocess() { + Ok(_) => {} + Err(e) => { + println!("got up to: {}", String::from_utf8_lossy(&buf)); + return Err(e); + } + } let s = String::from_utf8(buf).unwrap(); @@ -221,7 +236,6 @@ mod utils { param_name.push(pattern_char.unwrap()); pattern_char = pattern.next(); } - println!("param_name: {}", param_name); pattern_char = pattern.next(); let mut param_value = String::new(); while path_char != Some('/') && path_char.is_some() { @@ -295,16 +309,12 @@ mod utils { vec![("name", "a"), ("name2", "c")], ), ("/{name}/b/{name2}", "/a/b", vec![("name", "a")]), - ( - "/{name}/b/{name2}", - "/a/b/c/d/e", - vec![("name", "a"), ("name2", "c")], - ), ]; let lua = Lua::new(); - for (pattern, path, expected) in cases { + for (pattern, path, mut expected) in cases { + expected.sort_by_key(|(k, _)| k.to_owned()); lua.context(|ctx| { let res = super::url_extract(ctx, (pattern.to_string(), path.to_string())).unwrap(); @@ -313,6 +323,8 @@ mod utils { let (key, value) = pair.unwrap(); res_vec.push((key, value)); } + res_vec.sort_by_key(|(k, _)| k.clone()); + let equal = res_vec .iter() .zip(expected.iter()) -- cgit v1.3.1