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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
mod common;
mod repr;
pub use self::repr::get_reflect_property_type;
use self::common::*;
use std::collections::HashMap;
use types::SharedUnit;
use eval::Expr;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Appearance {
Background(Background),
Transforms(Transforms),
Filters(Filters),
BorderRadius(BorderRadius),
BorderColor(BorderColor),
BorderStyle(BorderStyle),
Auto,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Layout {
FlexDirection(FlexDirection),
PositionType(PositionType),
AspectRatio(AspectRatio),
BorderWidth(BorderWidth),
FlexShrink(FlexShrink),
FlexFactor(FlexFactor),
Overflow(Overflow),
FlexGrow(FlexGrow),
Display(Display),
Justify(Justify),
Align(Align),
Wrap(Wrap),
SharedUnit(SharedUnit),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PropertyValue {
Appearance(Appearance),
Layout(Layout),
}
pub type PropertiesApperance = PropertiesStore<Appearance>;
pub type PropertiesLayout = PropertiesStore<FlexStyle>;
pub type PropertiesExpressions = PropertiesStore<Expr>;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PropertiesStore<T>(pub HashMap<String, T>);
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct Properties {
pub expressions: PropertiesExpressions,
pub appearance: PropertiesApperance,
pub layout: PropertiesLayout,
}
impl_union_property_conversion!(Appearance);
impl_union_property_conversion!(Layout);
impl<T> Default for PropertiesStore<T> {
fn default() -> PropertiesStore<T> {
PropertiesStore(HashMap::new())
}
}