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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#[derive(Default, Debug)]
pub struct WidgetProps {
    pub open: Option<bool>,
    pub xywh: String,
    pub label: Option<String>,
    pub typ: Option<String>,
    pub hide: Option<bool>,
    pub deactivate: Option<bool>,
    pub visible: Option<bool>,
    pub modal: Option<bool>,
    pub non_modal: Option<bool>,
    pub noborder: Option<bool>,
    pub xclass: Option<String>,
    pub size_range: Option<String>,
    pub resizable: Option<bool>,
    pub hotspot: Option<bool>,
    pub divider: Option<bool>,
    pub selected: Option<bool>,
    pub color: Option<u32>,
    pub selection_color: Option<u32>,
    pub tooltip: Option<String>,
    pub image: Option<String>,
    pub deimage: Option<String>,
    pub r#box: Option<String>,
    pub down_box: Option<String>,
    pub value: Option<String>,
    pub labeltype: Option<String>,
    pub labelfont: Option<i32>,
    pub labelsize: Option<i32>,
    pub labelcolor: Option<u32>,
    pub align: Option<i32>,
    pub when: Option<i32>,
    pub minimum: Option<f64>,
    pub maximum: Option<f64>,
    pub step: Option<f64>,
    pub slider_size: Option<f64>,
    pub size: Option<f64>,
    pub textfont: Option<i32>,
    pub textsize: Option<i32>,
    pub textcolor: Option<u32>,
    pub class: Option<String>,
    pub shortcut: Option<String>,
    pub code0: Option<String>,
    pub code1: Option<String>,
    pub code2: Option<String>,
    pub code3: Option<String>,
    pub extra_code: Option<String>,
    pub size_tuple: Option<String>,
    pub margins: Option<String>,
    pub gap: Option<i32>,
    pub user_data: Option<String>,
    pub user_data_type: Option<String>,
    pub callback: Option<String>,
    pub comment: Option<String>,
}

#[derive(Debug, Default)]
pub struct Widget {
    pub typ: String,
    pub name: String,
    pub props: WidgetProps,
    pub children: Vec<Widget>,
}

#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum Visibility {
    PUBLIC,
    PRIVATE,
    PROTECTED,
}

impl Default for Visibility {
    fn default() -> Self {
        Visibility::PUBLIC
    }
}

#[derive(Debug, Default)]
pub struct FunctionProps {
    pub visibility: Option<Visibility>,
    pub open: Option<bool>,
    pub c: Option<bool>,
    pub return_type: Option<String>,
    pub comment: Option<String>,
}

#[derive(Debug, Default)]
pub struct Function {
    pub name: String,
    pub props: FunctionProps,
    pub code: Option<String>,
    pub widgets: Vec<Widget>,
}

#[derive(Debug, Default)]
pub struct ClassProps {
    pub visibility: Option<Visibility>,
    pub open: Option<bool>,
    pub comment: Option<String>,
}

#[derive(Debug, Default)]
pub struct Class {
    pub name: String,
    pub props: ClassProps,
    pub functions: Vec<Function>,
}

#[derive(Debug, Default)]
pub struct DeclProps {
    pub visibility: Visibility,
    pub global: Option<bool>,
    pub local: Option<bool>,
}

#[derive(Debug, Default)]
pub struct Decl {
    pub decl: String,
    pub props: DeclProps,
}

#[derive(Debug, Default)]
pub struct CommentProps {
    pub in_source: Option<bool>,
    pub in_header: Option<bool>,
}

#[derive(Debug, Default)]
pub struct Comment {
    pub comment: String,
    pub props: CommentProps,
}

#[derive(Debug, Default)]
pub struct Ast {
    pub i18n_type: Option<bool>,
    pub classes: Vec<Class>,
    pub widget_classes: Vec<Widget>,
    pub functions: Vec<Function>,
    pub comments: Vec<Comment>,
    pub decls: Vec<Decl>,
}