summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
blob: 8e31dc324c47c06d592739e83ecff40f04eff8b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use crate::types::{ElementName, RenderedElement};

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![{elements}]{props};");
            }
            ElementName::Container => {
                imports = format!("{imports}\nuse iced::widget::container;");
                view = format!("{view}\ncontainer({elements}){props};");
            }
            _ => {}
        }
    }
}