summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpml68 <contact@pml68.me>2024-09-03 08:29:54 +0200
committerpml68 <contact@pml68.me>2024-09-22 23:55:11 +0200
commita2dc182cec0db1c6035a47cc17a853fa29ae53ab (patch)
treefcc760a7d71209a35832cb4a290bd1443c9a03fd /src
parentfeat: start codegen (diff)
downloadiced-builder-a2dc182cec0db1c6035a47cc17a853fa29ae53ab.tar.gz
feat: format children nodes into code (without props)
Diffstat (limited to '')
-rw-r--r--src/codegen/mod.rs27
-rw-r--r--src/types/mod.rs24
2 files changed, 37 insertions, 14 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 37ada3a..8e31dc3 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -4,12 +4,35 @@ impl RenderedElement {
pub fn codegen(&self) -> Result<(String, String), &str> {
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();
+
+ match el.codegen() {
+ Ok(e) => (children, imports) = e,
+ Err(err) => return Err(err),
+ }
+ elements = format!("{elements},{}", children);
+ }
+ }
+ None => {}
+ }
match self.name {
ElementName::Row => {
- imports = format!("{imports}\nuse iced::widget::row");
- view = format!("{view}\nrow![]");
+ imports = format!("{imports}\nuse iced::widget::row;");
+ view = format!("{view}\nrow![{elements}]{props};");
+ }
+ ElementName::Container => {
+ imports = format!("{imports}\nuse iced::widget::container;");
+ view = format!("{view}\ncontainer({elements}){props};");
}
+ _ => {}
}
}
}
diff --git a/src/types/mod.rs b/src/types/mod.rs
index 31c233d..09b0f07 100644
--- a/src/types/mod.rs
+++ b/src/types/mod.rs
@@ -30,18 +30,18 @@ pub enum ElementName {
}
pub struct Props {
- align_items: Option<Alignment>,
- align_x: Option<Horizontal>,
- align_y: Option<Vertical>,
- horizontal_alignment: Option<Horizontal>,
- vertical_alignment: Option<Vertical>,
- height: Option<Length>,
- width: Option<Length>,
- font: Option<Font>,
- padding: Option<i32>,
- spacing: Option<i32>,
- content_fit: Option<ContentFit>,
- shaping: Option<Shaping>,
+ pub align_items: Option<Alignment>,
+ pub align_x: Option<Horizontal>,
+ pub align_y: Option<Vertical>,
+ pub horizontal_alignment: Option<Horizontal>,
+ pub vertical_alignment: Option<Vertical>,
+ pub height: Option<Length>,
+ pub width: Option<Length>,
+ pub font: Option<Font>,
+ pub padding: Option<i32>,
+ pub spacing: Option<i32>,
+ pub content_fit: Option<ContentFit>,
+ pub shaping: Option<Shaping>,
}
pub enum DesignerPage {