1use schemars::JsonSchema;
2use serde::Deserialize;
3
4#[derive(Deserialize, JsonSchema)]
5#[serde(rename_all = "snake_case")]
6pub enum WaterfallPointKind {
7 Increase,
8 Decrease,
9 Total,
10}
11
12#[derive(Deserialize, JsonSchema)]
13#[serde(rename_all = "snake_case")]
14pub enum ShapeKind {
15 Rectangle,
16 RoundedRectangle,
17 Ellipse,
18 Triangle,
19 Diamond,
20 Arrow,
21 Callout,
22 TextBox,
23}
24
25#[derive(Deserialize, JsonSchema)]
26#[serde(rename_all = "snake_case")]
27pub enum ChartType {
28 Bar,
29 Column,
30 Line,
31 Pie,
32 Scatter,
33 Area,
34 Doughnut,
35}
36
37#[derive(Deserialize, JsonSchema)]
38#[serde(rename_all = "snake_case")]
39pub enum SparklineType {
40 Line,
41 Column,
42 WinLoss,
43}
44
45#[derive(Deserialize, JsonSchema)]
46#[serde(rename_all = "snake_case")]
47pub enum HorizontalAlignment {
48 Left,
49 Center,
50 Right,
51 Fill,
52 Justify,
53}
54
55#[derive(Deserialize, JsonSchema)]
56#[serde(rename_all = "snake_case")]
57pub enum VerticalAlignment {
58 Top,
59 Center,
60 Bottom,
61 Justify,
62}
63
64#[derive(Deserialize, JsonSchema)]
65#[serde(rename_all = "snake_case")]
66pub enum BorderStyle {
67 Thin,
68 Medium,
69 Thick,
70 Dashed,
71 Dotted,
72 Double,
73 None,
74}
75
76#[derive(Deserialize, JsonSchema)]
77#[serde(rename_all = "snake_case")]
78pub enum LegendPosition {
79 Top,
80 Bottom,
81 Left,
82 Right,
83 None,
84}
85
86#[derive(Default, Deserialize, JsonSchema)]
87#[serde(rename_all = "snake_case")]
88pub enum MatchMode {
89 Exact,
90 #[default]
91 #[serde(rename = "substring")]
92 Substring,
93}
94
95#[derive(Deserialize, JsonSchema)]
96#[serde(rename_all = "snake_case")]
97pub enum ComparisonOperator {
98 GreaterThan,
99 LessThan,
100 Between,
101 EqualTo,
102 NotEqualTo,
103 GreaterThanOrEqual,
104 LessThanOrEqual,
105}
106
107#[derive(Deserialize, JsonSchema)]
108#[serde(rename_all = "snake_case")]
109pub enum IconSetStyle {
110 ThreeArrows,
111 ThreeTrafficLights,
112 ThreeSymbols,
113 FourArrows,
114 FiveArrows,
115}
116
117#[derive(Deserialize, JsonSchema)]
118#[serde(rename_all = "snake_case")]
119pub enum AlertStyle {
120 Stop,
121 Warning,
122 Information,
123}
124
125#[derive(Deserialize, JsonSchema)]
126#[serde(tag = "type", rename_all = "snake_case")]
127pub enum ConditionalFormatRule {
128 CellValue {
129 operator: ComparisonOperator,
130 value: f64,
131 value2: Option<f64>,
132 },
133 ColorScale2 {
134 min_color: String,
135 max_color: String,
136 },
137 ColorScale3 {
138 min_color: String,
139 mid_color: String,
140 max_color: String,
141 },
142 DataBar {
143 color: String,
144 },
145 IconSet {
146 style: IconSetStyle,
147 },
148}
149
150#[derive(Deserialize, JsonSchema)]
151#[serde(tag = "type", rename_all = "snake_case")]
152pub enum ValidationRule {
153 List { values: Vec<String> },
155 ListRange { range: String },
157 WholeNumber { min: Option<i64>, max: Option<i64> },
159 Decimal { min: Option<f64>, max: Option<f64> },
161 DateRange {
163 min: Option<String>,
164 max: Option<String>,
165 },
166 TextLength { min: Option<u32>, max: Option<u32> },
168 CustomFormula { formula: String },
170}
171
172#[derive(Deserialize, JsonSchema)]
173pub struct ConditionalFormatStyle {
174 #[serde(default)]
175 pub font_color: Option<String>,
176 #[serde(default)]
177 pub background_color: Option<String>,
178 #[serde(default)]
179 pub bold: Option<bool>,
180}
181
182#[derive(Deserialize, JsonSchema)]
183pub struct ValidationMessage {
184 pub title: String,
185 pub body: String,
186}
187
188#[derive(Deserialize, JsonSchema)]
189pub struct ValidationAlert {
190 pub style: AlertStyle,
191 pub title: String,
192 pub message: String,
193}