feat(build): emit checked param tokens
Generate ParamName constants for handle data parameters so public code can refer to checked param metadata instead of stringly typed names. req: codegen/003
This commit is contained in:
@@ -425,6 +425,22 @@ impl Resources {
|
||||
));
|
||||
out.push_str(&format!("{pad}}}\n\n"));
|
||||
|
||||
out.push_str(&format!("{pad}#[allow(non_upper_case_globals)]\n{pad}pub mod params {{\n"));
|
||||
let mut emitted_params = BTreeSet::new();
|
||||
for res in self.handles.values().filter(|res| component_matches(res, component)) {
|
||||
if let Some(params) = self.handle_params.get(&res.ident) {
|
||||
for param in params {
|
||||
if emitted_params.insert(param.as_str()) {
|
||||
out.push_str(&format!(
|
||||
"{inner}pub const {param}: ::slhx::ParamName = ::slhx::ParamName::new({});\n",
|
||||
rust_str(param)
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
out.push_str(&format!("{pad}}}\n\n"));
|
||||
|
||||
out.push_str(&format!("{pad}#[allow(non_upper_case_globals)]\n{pad}pub mod atoms {{\n"));
|
||||
for res in self.atoms.values().filter(|res| component_matches(res, component)) {
|
||||
out.push_str(&format!(
|
||||
@@ -1076,6 +1092,8 @@ mod tests {
|
||||
assert!(generated.contains("pub const todos"));
|
||||
assert!(generated.contains("pub mod handles"));
|
||||
assert!(generated.contains("pub const create: ::slhx::Handle<::slhx::Form<::std::string::String>>"));
|
||||
assert!(generated.contains("pub mod params"));
|
||||
assert!(generated.contains("pub const todo_id: ::slhx::ParamName = ::slhx::ParamName::new(\"todo_id\")"));
|
||||
assert!(generated.contains("pub mod forms"));
|
||||
assert!(generated.contains("pub mod atoms"));
|
||||
assert!(generated.contains("pub const filter"));
|
||||
|
||||
Reference in New Issue
Block a user