charming_fork_zephyr/component/
angle_axis.rs

1use serde::Serialize;
2
3use crate::element::{
4    AxisLabel, AxisLine, AxisPointer, AxisTick, AxisType, BoundaryGap, MinorSplitLine, MinorTick,
5    SplitArea, SplitLine,
6};
7
8/// The angle axis in Polar Coordinate.
9#[derive(Serialize)]
10#[serde(rename_all = "camelCase")]
11pub struct AngleAxis {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    boundary_gap: Option<BoundaryGap>,
14
15    /// Component ID.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    id: Option<String>,
18
19    /// The index of angle axis in Polar Coordinate.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    polar_index: Option<i64>,
22
23    /// Starting angle of axis, default to 90.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    start_angle: Option<i64>,
26
27    /// Whether the direction of axis is clockwise, default to true.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    clockwise: Option<bool>,
30
31    /// Type of axis.
32    #[serde(skip_serializing_if = "Option::is_none")]
33    #[serde(rename = "type")]
34    type_: Option<AxisType>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    zlevel: Option<i64>,
38
39    #[serde(skip_serializing_if = "Option::is_none")]
40    z: Option<i64>,
41
42    /// The minimun value of axis.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    min: Option<i64>,
45
46    /// The maximum value of axis.
47    #[serde(skip_serializing_if = "Option::is_none")]
48    max: Option<i64>,
49
50    #[serde(skip_serializing_if = "Option::is_none")]
51    scale: Option<bool>,
52
53    #[serde(skip_serializing_if = "Option::is_none")]
54    split_number: Option<i64>,
55
56    #[serde(skip_serializing_if = "Option::is_none")]
57    min_interval: Option<i64>,
58
59    #[serde(skip_serializing_if = "Option::is_none")]
60    max_interval: Option<i64>,
61
62    #[serde(skip_serializing_if = "Option::is_none")]
63    interval: Option<i64>,
64
65    #[serde(skip_serializing_if = "Option::is_none")]
66    log_base: Option<i64>,
67
68    #[serde(skip_serializing_if = "Option::is_none")]
69    silent: Option<bool>,
70
71    #[serde(skip_serializing_if = "Option::is_none")]
72    trigger_event: Option<bool>,
73
74    #[serde(skip_serializing_if = "Option::is_none")]
75    axis_line: Option<AxisLine>,
76
77    #[serde(skip_serializing_if = "Option::is_none")]
78    axis_tick: Option<AxisTick>,
79
80    #[serde(skip_serializing_if = "Option::is_none")]
81    axis_pointer: Option<AxisPointer>,
82
83    #[serde(skip_serializing_if = "Option::is_none")]
84    minor_tick: Option<MinorTick>,
85
86    #[serde(skip_serializing_if = "Option::is_none")]
87    axis_label: Option<AxisLabel>,
88
89    #[serde(skip_serializing_if = "Option::is_none")]
90    split_line: Option<SplitLine>,
91
92    #[serde(skip_serializing_if = "Option::is_none")]
93    minor_split_line: Option<MinorSplitLine>,
94
95    #[serde(skip_serializing_if = "Option::is_none")]
96    split_area: Option<SplitArea>,
97
98    #[serde(skip_serializing_if = "Vec::is_empty")]
99    data: Vec<String>,
100}
101
102impl AngleAxis {
103    pub fn new() -> Self {
104        Self {
105            boundary_gap: None,
106            id: None,
107            polar_index: None,
108            start_angle: None,
109            clockwise: None,
110            type_: None,
111            zlevel: None,
112            z: None,
113            min: None,
114            max: None,
115            scale: None,
116            split_number: None,
117            min_interval: None,
118            max_interval: None,
119            interval: None,
120            log_base: None,
121            silent: None,
122            trigger_event: None,
123            axis_line: None,
124            axis_tick: None,
125            axis_pointer: None,
126            minor_tick: None,
127            axis_label: None,
128            split_line: None,
129            minor_split_line: None,
130            split_area: None,
131            data: vec![],
132        }
133    }
134
135    pub fn boundary_gap<B: Into<BoundaryGap>>(mut self, boundary_gap: B) -> Self {
136        self.boundary_gap = Some(boundary_gap.into());
137        self
138    }
139
140    pub fn id<S: Into<String>>(mut self, id: S) -> Self {
141        self.id = Some(id.into());
142        self
143    }
144
145    pub fn polar_index<F: Into<i64>>(mut self, polar_index: F) -> Self {
146        self.polar_index = Some(polar_index.into());
147        self
148    }
149
150    pub fn start_angle<F: Into<i64>>(mut self, start_angle: F) -> Self {
151        self.start_angle = Some(start_angle.into());
152        self
153    }
154
155    pub fn clockwise(mut self, clockwise: bool) -> Self {
156        self.clockwise = Some(clockwise);
157        self
158    }
159
160    pub fn type_<T: Into<AxisType>>(mut self, type_: T) -> Self {
161        self.type_ = Some(type_.into());
162        self
163    }
164
165    pub fn zlevel<F: Into<i64>>(mut self, zlevel: F) -> Self {
166        self.zlevel = Some(zlevel.into());
167        self
168    }
169
170    pub fn z<F: Into<i64>>(mut self, z: F) -> Self {
171        self.z = Some(z.into());
172        self
173    }
174
175    pub fn min<F: Into<i64>>(mut self, min: F) -> Self {
176        self.min = Some(min.into());
177        self
178    }
179
180    pub fn max<F: Into<i64>>(mut self, max: F) -> Self {
181        self.max = Some(max.into());
182        self
183    }
184
185    pub fn scale(mut self, scale: bool) -> Self {
186        self.scale = Some(scale);
187        self
188    }
189
190    pub fn split_number<F: Into<i64>>(mut self, split_number: F) -> Self {
191        self.split_number = Some(split_number.into());
192        self
193    }
194
195    pub fn min_interval<F: Into<i64>>(mut self, min_interval: F) -> Self {
196        self.min_interval = Some(min_interval.into());
197        self
198    }
199
200    pub fn max_interval<F: Into<i64>>(mut self, max_interval: F) -> Self {
201        self.max_interval = Some(max_interval.into());
202        self
203    }
204
205    pub fn interval<F: Into<i64>>(mut self, interval: F) -> Self {
206        self.interval = Some(interval.into());
207        self
208    }
209
210    pub fn log_base<F: Into<i64>>(mut self, log_base: F) -> Self {
211        self.log_base = Some(log_base.into());
212        self
213    }
214
215    pub fn silent(mut self, silent: bool) -> Self {
216        self.silent = Some(silent);
217        self
218    }
219
220    pub fn trigger_event(mut self, trigger_event: bool) -> Self {
221        self.trigger_event = Some(trigger_event);
222        self
223    }
224
225    pub fn axis_line<A: Into<AxisLine>>(mut self, axis_line: A) -> Self {
226        self.axis_line = Some(axis_line.into());
227        self
228    }
229
230    pub fn axis_tick<A: Into<AxisTick>>(mut self, axis_tick: A) -> Self {
231        self.axis_tick = Some(axis_tick.into());
232        self
233    }
234
235    pub fn axis_pointer<A: Into<AxisPointer>>(mut self, axis_pointer: A) -> Self {
236        self.axis_pointer = Some(axis_pointer.into());
237        self
238    }
239
240    pub fn minor_tick<M: Into<MinorTick>>(mut self, minor_tick: M) -> Self {
241        self.minor_tick = Some(minor_tick.into());
242        self
243    }
244
245    pub fn axis_label<A: Into<AxisLabel>>(mut self, axis_label: A) -> Self {
246        self.axis_label = Some(axis_label.into());
247        self
248    }
249
250    pub fn split_line<S: Into<SplitLine>>(mut self, split_line: S) -> Self {
251        self.split_line = Some(split_line.into());
252        self
253    }
254
255    pub fn minor_split_line<M: Into<MinorSplitLine>>(mut self, minor_split_line: M) -> Self {
256        self.minor_split_line = Some(minor_split_line.into());
257        self
258    }
259
260    pub fn split_area<S: Into<SplitArea>>(mut self, split_area: S) -> Self {
261        self.split_area = Some(split_area.into());
262        self
263    }
264
265    pub fn data<S: Into<String>>(mut self, data: Vec<S>) -> Self {
266        self.data = data.into_iter().map(|s| s.into()).collect();
267        self
268    }
269}