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}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27#[cfg_attr(feature = "schema", derive(JsonSchema))]
28#[serde(rename_all = "camelCase")]
29pub struct ListItem {
30 pub text: String,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub checked: Option<bool>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub action: Option<String>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub payload: Option<String>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45#[cfg_attr(feature = "schema", derive(JsonSchema))]
46#[serde(tag = "draw", rename_all = "camelCase")]
47pub enum CanvasDrawCommand {
48 #[serde(rename = "circle")]
50 Circle {
51 cx: f64,
53 cy: f64,
55 r: f64,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
59 fill: Option<ColorValue>,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
62 stroke: Option<ColorValue>,
63 #[serde(
65 rename = "strokeWidth",
66 default,
67 skip_serializing_if = "Option::is_none"
68 )]
69 stroke_width: Option<f64>,
70 },
71 #[serde(rename = "line")]
73 Line {
74 x1: f64,
76 y1: f64,
78 x2: f64,
80 y2: f64,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
84 stroke: Option<ColorValue>,
85 #[serde(
87 rename = "strokeWidth",
88 default,
89 skip_serializing_if = "Option::is_none"
90 )]
91 stroke_width: Option<f64>,
92 #[serde(rename = "lineCap", default, skip_serializing_if = "Option::is_none")]
94 line_cap: Option<String>,
95 },
96 #[serde(rename = "rect")]
98 Rect {
99 x: f64,
101 y: f64,
103 width: f64,
105 height: f64,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
109 fill: Option<ColorValue>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
112 stroke: Option<ColorValue>,
113 #[serde(
115 rename = "strokeWidth",
116 default,
117 skip_serializing_if = "Option::is_none"
118 )]
119 stroke_width: Option<f64>,
120 #[serde(
122 rename = "cornerRadius",
123 default,
124 skip_serializing_if = "Option::is_none"
125 )]
126 corner_radius: Option<f64>,
127 },
128 #[serde(rename = "arc")]
130 Arc {
131 cx: f64,
133 cy: f64,
135 r: f64,
137 #[serde(rename = "startAngle")]
139 start_angle: f64,
140 #[serde(rename = "endAngle")]
142 end_angle: f64,
143 #[serde(default, skip_serializing_if = "Option::is_none")]
145 fill: Option<ColorValue>,
146 #[serde(default, skip_serializing_if = "Option::is_none")]
148 stroke: Option<ColorValue>,
149 #[serde(
151 rename = "strokeWidth",
152 default,
153 skip_serializing_if = "Option::is_none"
154 )]
155 stroke_width: Option<f64>,
156 },
157 #[serde(rename = "text")]
159 Text {
160 x: f64,
162 y: f64,
164 content: String,
166 #[serde(rename = "fontSize", default, skip_serializing_if = "Option::is_none")]
168 font_size: Option<f64>,
169 #[serde(default, skip_serializing_if = "Option::is_none")]
171 color: Option<ColorValue>,
172 #[serde(default, skip_serializing_if = "Option::is_none")]
174 anchor: Option<String>,
175 },
176 #[serde(rename = "path")]
178 Path {
179 d: String,
181 #[serde(default, skip_serializing_if = "Option::is_none")]
183 fill: Option<ColorValue>,
184 #[serde(default, skip_serializing_if = "Option::is_none")]
186 stroke: Option<ColorValue>,
187 #[serde(
189 rename = "strokeWidth",
190 default,
191 skip_serializing_if = "Option::is_none"
192 )]
193 stroke_width: Option<f64>,
194 },
195}