Skip to main content

excel_mcp_server/types/
enums.rs

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    /// Dropdown list from explicit values
154    List { values: Vec<String> },
155    /// Dropdown list from a cell range
156    ListRange { range: String },
157    /// Whole number in a range
158    WholeNumber { min: Option<i64>, max: Option<i64> },
159    /// Decimal number in a range
160    Decimal { min: Option<f64>, max: Option<f64> },
161    /// Date in a range (ISO 8601 strings)
162    DateRange {
163        min: Option<String>,
164        max: Option<String>,
165    },
166    /// Text length in a range
167    TextLength { min: Option<u32>, max: Option<u32> },
168    /// Custom formula
169    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}