lenra_app/components/
lenra.rs

1use crate::from_value;
2
3include!("../gen/components_lenra.rs");
4
5impl Into<LenraComponent> for builder::Actionable {
6    fn into(self) -> LenraComponent {
7        LenraComponent::Actionable(Box::new(self.try_into().unwrap()))
8    }
9}
10
11impl Into<LenraComponent> for builder::Button {
12    fn into(self) -> LenraComponent {
13        LenraComponent::Button(self.try_into().unwrap())
14    }
15}
16
17impl Into<LenraComponent> for builder::Carousel {
18    fn into(self) -> LenraComponent {
19        LenraComponent::Carousel(self.try_into().unwrap())
20    }
21}
22
23impl Into<LenraComponent> for builder::Checkbox {
24    fn into(self) -> LenraComponent {
25        LenraComponent::Checkbox(self.try_into().unwrap())
26    }
27}
28
29impl Into<LenraComponent> for builder::Container {
30    fn into(self) -> LenraComponent {
31        LenraComponent::Container(self.try_into().unwrap())
32    }
33}
34
35impl Into<LenraComponent> for builder::DropdownButton {
36    fn into(self) -> LenraComponent {
37        LenraComponent::DropdownButton(self.try_into().unwrap())
38    }
39}
40
41impl Into<LenraComponent> for builder::Flex {
42    fn into(self) -> LenraComponent {
43        LenraComponent::Flex(self.try_into().unwrap())
44    }
45}
46
47impl Into<LenraComponent> for builder::Flexible {
48    fn into(self) -> LenraComponent {
49        LenraComponent::Flexible(self.try_into().unwrap())
50    }
51}
52
53impl Into<LenraComponent> for builder::Form {
54    fn into(self) -> LenraComponent {
55        LenraComponent::Form(self.try_into().unwrap())
56    }
57}
58
59impl Into<LenraComponent> for builder::Icon {
60    fn into(self) -> LenraComponent {
61        LenraComponent::Icon(self.try_into().unwrap())
62    }
63}
64
65impl Into<LenraComponent> for builder::Image {
66    fn into(self) -> LenraComponent {
67        LenraComponent::Image(self.try_into().unwrap())
68    }
69}
70
71impl Into<LenraComponent> for builder::Menu {
72    fn into(self) -> LenraComponent {
73        LenraComponent::Menu(self.try_into().unwrap())
74    }
75}
76
77impl Into<LenraComponent> for builder::MenuItem {
78    fn into(self) -> LenraComponent {
79        LenraComponent::MenuItem(self.try_into().unwrap())
80    }
81}
82
83impl Into<LenraComponent> for builder::OverlayEntry {
84    fn into(self) -> LenraComponent {
85        LenraComponent::OverlayEntry(self.try_into().unwrap())
86    }
87}
88
89impl Into<LenraComponent> for builder::Radio {
90    fn into(self) -> LenraComponent {
91        LenraComponent::Radio(self.try_into().unwrap())
92    }
93}
94
95impl Into<LenraComponent> for builder::Slider {
96    fn into(self) -> LenraComponent {
97        LenraComponent::Slider(self.try_into().unwrap())
98    }
99}
100
101impl Into<LenraComponent> for builder::Stack {
102    fn into(self) -> LenraComponent {
103        LenraComponent::Stack(self.try_into().unwrap())
104    }
105}
106
107impl Into<LenraComponent> for builder::StatusSticker {
108    fn into(self) -> LenraComponent {
109        LenraComponent::StatusSticker(self.try_into().unwrap())
110    }
111}
112
113impl Into<LenraComponent> for builder::Text {
114    fn into(self) -> LenraComponent {
115        LenraComponent::Text(self.try_into().unwrap())
116    }
117}
118
119// impl Into<LenraComponent> for lenra_gen::builder::TextField {
120//     fn into(self) -> LenraComponent {
121//         LenraComponent::TextField(self.try_into().unwrap())
122//     }
123// }
124
125impl Into<LenraComponent> for builder::Toggle {
126    fn into(self) -> LenraComponent {
127        LenraComponent::Toggle(self.try_into().unwrap())
128    }
129}
130
131impl Into<LenraComponent> for builder::View {
132    fn into(self) -> LenraComponent {
133        LenraComponent::View(self.try_into().unwrap())
134    }
135}
136
137impl Into<LenraComponent> for builder::Wrap {
138    fn into(self) -> LenraComponent {
139        LenraComponent::Wrap(self.try_into().unwrap())
140    }
141}
142
143impl StylesPadding {
144    pub fn symmetric(vertical: u16, horizontal: u16) -> StylesPadding {
145        StylesPadding {
146            top: Some(vertical.into()),
147            bottom: Some(vertical.into()),
148            left: Some(horizontal.into()),
149            right: Some(horizontal.into()),
150        }
151    }
152}
153
154from_value!(DefsProps);
155from_value!(DataQuery);
156from_value!(DataProjection);
157
158#[cfg(test)]
159mod test {
160
161    use super::*;
162
163    #[test]
164    fn simple_lenra_component() {
165        let result: LenraComponent = flex(vec![text("Hello").into(), text("World").into()]).into();
166        assert_eq!(
167            serde_json::to_string(&result).unwrap(),
168            r#"{"children":[{"_type":"text","value":"Hello"},{"_type":"text","value":"World"}],"_type":"flex"}"#
169        );
170    }
171
172    #[test]
173    fn simple_icon() {
174        let icon: Icon = icon(StylesIconName::AcUnit).try_into().unwrap();
175        assert_eq!(
176            serde_json::to_string(&icon).unwrap(),
177            r#"{"_type":"icon","value":"ac_unit"}"#
178        );
179    }
180}