tauri_plugin_widgets/models/
data.rs1use serde::{Deserialize, Serialize};
5
6#[cfg(feature = "schema")]
7use schemars::JsonSchema;
8
9use super::style::ColorValue;
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13#[cfg_attr(feature = "schema", derive(JsonSchema))]
14#[serde(rename_all = "camelCase")]
15pub struct ChartDataPoint {
16 pub label: String,
18 pub value: f64,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub color: Option<ColorValue>,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub series: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30#[cfg_attr(feature = "schema", derive(JsonSchema))]
31#[serde(rename_all = "camelCase")]
32pub struct ListItem {
33 pub text: String,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub checked: Option<bool>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub action: Option<String>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub payload: Option<String>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48#[cfg_attr(feature = "schema", derive(JsonSchema))]
49#[serde(tag = "draw", rename_all = "camelCase")]
50pub enum CanvasDrawCommand {
51 #[serde(rename = "circle")]
53 Circle {
54 cx: f64,
56 cy: f64,
58 r: f64,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
62 fill: Option<ColorValue>,
63 #[serde(default, skip_serializing_if = "Option::is_none")]
65 stroke: Option<ColorValue>,
66 #[serde(
68 rename = "strokeWidth",
69 default,
70 skip_serializing_if = "Option::is_none"
71 )]
72 stroke_width: Option<f64>,
73 },
74 #[serde(rename = "line")]
76 Line {
77 x1: f64,
79 y1: f64,
81 x2: f64,
83 y2: f64,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 stroke: Option<ColorValue>,
88 #[serde(
90 rename = "strokeWidth",
91 default,
92 skip_serializing_if = "Option::is_none"
93 )]
94 stroke_width: Option<f64>,
95 #[serde(rename = "lineCap", default, skip_serializing_if = "Option::is_none")]
97 line_cap: Option<String>,
98 },
99 #[serde(rename = "rect")]
101 Rect {
102 x: f64,
104 y: f64,
106 width: f64,
108 height: f64,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
112 fill: Option<ColorValue>,
113 #[serde(default, skip_serializing_if = "Option::is_none")]
115 stroke: Option<ColorValue>,
116 #[serde(
118 rename = "strokeWidth",
119 default,
120 skip_serializing_if = "Option::is_none"
121 )]
122 stroke_width: Option<f64>,
123 #[serde(
125 rename = "cornerRadius",
126 default,
127 skip_serializing_if = "Option::is_none"
128 )]
129 corner_radius: Option<f64>,
130 },
131 #[serde(rename = "arc")]
133 Arc {
134 cx: f64,
136 cy: f64,
138 r: f64,
140 #[serde(rename = "startAngle")]
142 start_angle: f64,
143 #[serde(rename = "endAngle")]
145 end_angle: f64,
146 #[serde(default, skip_serializing_if = "Option::is_none")]
148 fill: Option<ColorValue>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
151 stroke: Option<ColorValue>,
152 #[serde(
154 rename = "strokeWidth",
155 default,
156 skip_serializing_if = "Option::is_none"
157 )]
158 stroke_width: Option<f64>,
159 },
160 #[serde(rename = "text")]
162 Text {
163 x: f64,
165 y: f64,
167 content: String,
169 #[serde(rename = "fontSize", default, skip_serializing_if = "Option::is_none")]
171 font_size: Option<f64>,
172 #[serde(default, skip_serializing_if = "Option::is_none")]
174 color: Option<ColorValue>,
175 #[serde(default, skip_serializing_if = "Option::is_none")]
177 anchor: Option<String>,
178 },
179 #[serde(rename = "path")]
181 Path {
182 d: String,
184 #[serde(default, skip_serializing_if = "Option::is_none")]
186 fill: Option<ColorValue>,
187 #[serde(default, skip_serializing_if = "Option::is_none")]
189 stroke: Option<ColorValue>,
190 #[serde(
192 rename = "strokeWidth",
193 default,
194 skip_serializing_if = "Option::is_none"
195 )]
196 stroke_width: Option<f64>,
197 },
198}