charming_fork_zephyr/element/
text_style.rs1use 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}