charming_fork_zephyr/element/
pointer.rs

1use serde::Serialize;
2
3use super::{icon::Icon, item_style::ItemStyle};
4
5#[derive(Serialize)]
6#[serde(rename_all = "camelCase")]
7pub struct Pointer {
8    #[serde(skip_serializing_if = "Option::is_none")]
9    show: Option<bool>,
10
11    #[serde(skip_serializing_if = "Option::is_none")]
12    show_above: Option<bool>,
13
14    #[serde(skip_serializing_if = "Option::is_none")]
15    icon: Option<Icon>,
16
17    #[serde(skip_serializing_if = "Option::is_none")]
18    offset_center: Option<(String, String)>,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
21    length: Option<String>,
22
23    #[serde(skip_serializing_if = "Option::is_none")]
24    width: Option<i64>,
25
26    #[serde(skip_serializing_if = "Option::is_none")]
27    keep_aspect: Option<bool>,
28
29    #[serde(skip_serializing_if = "Option::is_none")]
30    item_style: Option<ItemStyle>,
31}
32
33impl Pointer {
34    pub fn new() -> Self {
35        Self {
36            show: None,
37            show_above: None,
38            icon: None,
39            offset_center: None,
40            length: None,
41            width: None,
42            keep_aspect: None,
43            item_style: None,
44        }
45    }
46
47    pub fn show(mut self, show: bool) -> Self {
48        self.show = Some(show);
49        self
50    }
51
52    pub fn show_above(mut self, show_above: bool) -> Self {
53        self.show_above = Some(show_above);
54        self
55    }
56
57    pub fn icon<S: Into<Icon>>(mut self, icon: S) -> Self {
58        self.icon = Some(icon.into());
59        self
60    }
61
62    pub fn offset_center<S: Into<String>>(mut self, offset_center: (S, S)) -> Self {
63        self.offset_center = Some((offset_center.0.into(), offset_center.1.into()));
64        self
65    }
66
67    pub fn length<S: Into<String>>(mut self, length: S) -> Self {
68        self.length = Some(length.into());
69        self
70    }
71
72    pub fn width<F: Into<i64>>(mut self, width: F) -> Self {
73        self.width = Some(width.into());
74        self
75    }
76
77    pub fn keep_aspect(mut self, keep_aspect: bool) -> Self {
78        self.keep_aspect = Some(keep_aspect);
79        self
80    }
81
82    pub fn item_style<S: Into<ItemStyle>>(mut self, item_style: S) -> Self {
83        self.item_style = Some(item_style.into());
84        self
85    }
86}