feat(build): type generated form handles
req: codegen/003
This commit is contained in:
+13
-3
@@ -67,6 +67,7 @@ pub fn app() -> AppBuilder {
|
||||
struct Resources {
|
||||
slots: BTreeMap<String, Resource>,
|
||||
handles: BTreeMap<String, Resource>,
|
||||
handle_forms: BTreeMap<String, String>,
|
||||
forms: BTreeMap<String, FormResource>,
|
||||
atoms: BTreeMap<String, Resource>,
|
||||
}
|
||||
@@ -136,7 +137,10 @@ impl Resources {
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default();
|
||||
self.insert_form(canonical_symbol(root, path, &form_name), form_name, component.clone(), controls)?;
|
||||
self.insert_form(canonical_symbol(root, path, &form_name), form_name.clone(), component.clone(), controls)?;
|
||||
if let (Some(handle_ident), Some(form_ident)) = (rust_ident(&name), rust_ident(&form_name)) {
|
||||
self.handle_forms.insert(handle_ident, form_ident);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -231,8 +235,13 @@ impl Resources {
|
||||
out.push_str(&format!("{pad}#[allow(non_upper_case_globals)]\n{pad}pub mod handles {{\n"));
|
||||
for res in self.handles.values().filter(|res| component_matches(res, component)) {
|
||||
handle_ids.push(res.id);
|
||||
let input = if self.handle_forms.contains_key(&res.ident) {
|
||||
"::slhx::Form<::std::string::String>"
|
||||
} else {
|
||||
"()"
|
||||
};
|
||||
out.push_str(&format!(
|
||||
"{inner}pub const {}: ::slhx::Handle<()> = ::slhx::Handle::new({});\n",
|
||||
"{inner}pub const {}: ::slhx::Handle<{input}> = ::slhx::Handle::new({});\n",
|
||||
res.ident, res.id
|
||||
));
|
||||
}
|
||||
@@ -681,6 +690,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn emits_generated_resources_from_heml() {
|
||||
// req: codegen/003
|
||||
let base = test_dir("slhx-build-test");
|
||||
let templates = base.join("templates");
|
||||
let out = base.join("out");
|
||||
@@ -698,7 +708,7 @@ mod tests {
|
||||
assert!(generated.contains("pub mod slots"));
|
||||
assert!(generated.contains("pub const todos"));
|
||||
assert!(generated.contains("pub mod handles"));
|
||||
assert!(generated.contains("pub const create"));
|
||||
assert!(generated.contains("pub const create: ::slhx::Handle<::slhx::Form<::std::string::String>>"));
|
||||
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