charming_fork_zephyr/element/
text_style.rs

1use serde::Serialize;
2
3use super::color::Color;
4
5#[derive(Serialize)]
6#[serde(rename_all = "camelCase")]
7pub struct TextStyle {
8    #[serde(skip_serializing_if = "Option::is_none")]
9    color: Option<Color>,
10
11    #[serde(skip_serializing_if = "Option::is_none")]
12    font_style: Option<String>,
13
14    #[serde(skip_serializing_if = "Option::is_none")]
15    font_weight: Option<String>,
16
17    #[serde(skip_serializing_if = "Option::is_none")]
18    font_family: Option<String>,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
21    font_size: Option<i64>,
22
23    #[serde(skip_serializing_if = "Option::is_none")]
24    line_height: Option<i64>,
25
26    #[serde(skip_serializing_if = "Option::is_none")]
27    align: Option<String>,
28    
29    #[serde(skip_serializing_if = "Option::is_none")]
30    padding: Option<[i64; 4]>,
31}
32
33impl TextStyle {
34    pub fn new() -> Self {
35        Self {
36            color: None,
37            font_style: None,
38            font_weight: None,
39            font_family: None,
40            font_size: None,
41            line_height: None,
42            align: None,
43            padding: None,
44        }
45    }
46
47    pub fn color<C: Into<Color>>(mut self, color: C) -> Self {
48        self.color = Some(color.into());
49        self
50    }
51
52    pub fn font_style<S: Into<String>>(mut self, font_style: S) -> Self {
53        self.font_style = Some(font_style.into());
54        self
55    }
56
57    pub fn font_weight<S: Into<String>>(mut self, font_weight: S) -> Self {
58        self.font_weight = Some(font_weight.into());
59        self
60    }
61
62    pub fn font_family<S: Into<String>>(mut self, font_family: S) -> Self {
63        self.font_family = Some(font_family.into());
64        self
65    }
66
67    pub fn font_size<F: Into<i64>>(mut self, font_size: F) -> Self {
68        self.font_size = Some(font_size.into());
69        self
70    }
71
72    pub fn line_height<F: Into<i64>>(mut self, line_height: F) -> Self {
73        self.line_height = Some(line_height.into());
74        self
75    }
76
77    pub fn align<S: Into<String>>(mut self, align: S) -> Self {
78        self.align = Some(align.into());
79        self
80    }
81
82    pub fn padding<F: Into<i64> + Copy>(mut self, padding: [F; 4]) -> Self {
83        self.padding = Some([
84            padding[0].into(),
85            padding[1].into(),
86            padding[2].into(),
87            padding[3].into(),
88        ]);
89        self
90    }
91
92    pub fn padding_all<F: Into<i64> + Copy>(mut self, padding: F) -> Self {
93        self.padding = Some([
94            padding.into(),
95            padding.into(),
96            padding.into(),
97            padding.into(),
98        ]);
99        self
100    }
101
102    pub fn padding_pair<F: Into<i64> + Copy>(mut self, padding: [F; 2]) -> Self {
103        self.padding = Some([
104            padding[0].into(),
105            padding[1].into(),
106            padding[0].into(),
107            padding[1].into(),
108        ]);
109        self
110    }
111}