summaryrefslogtreecommitdiff
path: root/src/types/rendered_element.rs
diff options
context:
space:
mode:
authorPolesznyák Márk László <116908301+pml68@users.noreply.github.com>2024-09-22 21:32:38 +0200
committerpml68 <contact@pml68.me>2024-09-22 23:55:11 +0200
commit0e1e21ad18dcf48e64422f7f45af44ac5ea4a7be (patch)
tree2fe99dcb6380deb067e3bc3005fb5275f33b48d5 /src/types/rendered_element.rs
parentfeat: add usable state logic (diff)
parentfeat: add "Copy to clipboard" button for code view (diff)
downloadiced-builder-0e1e21ad18dcf48e64422f7f45af44ac5ea4a7be.tar.gz
Merge pull request #1 from pml68/feat/codegen
Codegen done
Diffstat (limited to 'src/types/rendered_element.rs')
-rw-r--r--src/types/rendered_element.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/types/rendered_element.rs b/src/types/rendered_element.rs
new file mode 100644
index 0000000..f05594d
--- /dev/null
+++ b/src/types/rendered_element.rs
@@ -0,0 +1,47 @@
+use std::collections::HashMap;
+
+use unique_id::{string::StringGenerator, Generator};
+
+use iced::advanced::widget::Id;
+
+use super::ElementName;
+
+#[derive(Debug)]
+pub struct RenderedElement {
+ pub id: Id,
+ pub child_elements: Vec<RenderedElement>,
+ pub name: ElementName,
+ pub props: HashMap<&'static str, &'static str>,
+}
+
+impl RenderedElement {
+ pub fn new(name: ElementName) -> Self {
+ let gen = StringGenerator::default();
+ Self {
+ id: Id::new(gen.next_id()),
+ child_elements: vec![],
+ name,
+ props: HashMap::new(),
+ }
+ }
+
+ pub fn from_vec(name: ElementName, child_elements: Vec<RenderedElement>) -> Self {
+ let gen = StringGenerator::default();
+ Self {
+ id: Id::new(gen.next_id()),
+ child_elements,
+ name,
+ props: HashMap::new(),
+ }
+ }
+
+ pub fn push(mut self, element: RenderedElement) -> Self {
+ self.child_elements.push(element);
+ self
+ }
+
+ pub fn set_property(&mut self, prop: &'static str, value: &'static str) {
+ let prop_ref = self.props.entry(prop).or_insert(value);
+ *prop_ref = value;
+ }
+}