diff options
| author | pml68 <contact@pml68.me> | 2024-09-03 21:55:34 +0200 |
|---|---|---|
| committer | pml68 <contact@pml68.me> | 2024-09-22 23:55:11 +0200 |
| commit | e8792ea151e0c26fd3497a09446f1b846df1c87c (patch) | |
| tree | 3aed2ad399ae78fd6ead35c3d71906f0dbe31b71 /src/codegen | |
| parent | feat: format children nodes into code (without props) (diff) | |
| download | iced-builder-e8792ea151e0c26fd3497a09446f1b846df1c87c.tar.gz | |
feat: finish codegen for elements **without** props
feat: wow
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/mod.rs | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 8e31dc3..5ce8425 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1,38 +1,40 @@ -use crate::types::{ElementName, RenderedElement}; +use crate::types::{props::Props, rendered_element::RenderedElement, ElementName}; impl RenderedElement { - pub fn codegen(&self) -> Result<(String, String), &str> { + pub fn codegen(&self) -> (String, String) { let mut imports = String::new(); let mut view = String::new(); let mut props = String::new(); let mut elements = String::new(); - match self.children { - Some(els) => { - for el in els { - let mut children = String::new(); + for element in &self.child_elements { + let mut children = String::new(); - match el.codegen() { - Ok(e) => (children, imports) = e, - Err(err) => return Err(err), - } - elements = format!("{elements},{}", children); - } - } - None => {} + (imports, children) = element.codegen(); + elements = format!("{elements}{},", children); } - match self.name { + match &self.name { + ElementName::Container => { + imports = format!("{imports}\nuse iced::widget::container;"); + view = if self.child_elements.len() < 2 { + format!("{view}\ncontainer({elements}){props}") + } else { + format!("{view}\ncontainer(){props}") + }; + } ElementName::Row => { imports = format!("{imports}\nuse iced::widget::row;"); - view = format!("{view}\nrow![{elements}]{props};"); + view = format!("{view}\nrow![{elements}]{props}"); } - ElementName::Container => { - imports = format!("{imports}\nuse iced::widget::container;"); - view = format!("{view}\ncontainer({elements}){props};"); + ElementName::Text(string) => { + imports = format!("{imports}\nuse iced::widget::text;"); + view = format!("{view}\ntext(\"{string}\"){props}"); } _ => {} } + + (imports, view) } } |
