i3status_rs/protocol/
i3bar_block.rs1use crate::themes::color::Color;
2use serde::Serialize;
3
4#[derive(Serialize, Debug, Clone)]
6pub struct I3BarBlock {
7 pub full_text: String,
8 #[serde(skip_serializing_if = "String::is_empty")]
9 pub short_text: String,
10 #[serde(skip_serializing_if = "Color::skip_ser")]
11 pub color: Color,
12 #[serde(skip_serializing_if = "Color::skip_ser")]
13 pub background: Color,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub border: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub border_top: Option<usize>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub border_right: Option<usize>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub border_bottom: Option<usize>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub border_left: Option<usize>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub min_width: Option<I3BarBlockMinWidth>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub align: Option<I3BarBlockAlign>,
28 #[serde(skip_serializing_if = "Option::is_none")]
33 pub name: Option<String>,
34 #[serde(skip_serializing_if = "String::is_empty")]
38 pub instance: String,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub urgent: Option<bool>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub separator: Option<bool>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub separator_block_width: Option<usize>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub markup: Option<String>,
47}
48
49impl Default for I3BarBlock {
50 fn default() -> Self {
51 #[cfg(not(feature = "debug_borders"))]
52 let border = None;
53 #[cfg(feature = "debug_borders")]
54 let border = Some("#ff0000".to_string());
55 Self {
56 full_text: String::new(),
57 short_text: String::new(),
58 color: Color::None,
59 background: Color::None,
60 border,
61 border_top: None,
62 border_right: None,
63 border_bottom: None,
64 border_left: None,
65 min_width: None,
66 align: None,
67 name: None,
68 instance: String::new(),
69 urgent: None,
70 separator: Some(false),
71 separator_block_width: Some(0),
72 markup: Some("pango".to_string()),
73 }
74 }
75}
76
77#[derive(Serialize, Debug, Clone, Copy)]
78#[allow(dead_code)]
79#[serde(rename_all = "lowercase")]
80pub enum I3BarBlockAlign {
81 Center,
82 Right,
83 Left,
84}
85
86#[derive(Serialize, Debug, Clone)]
87#[allow(dead_code)]
88#[serde(untagged)]
89pub enum I3BarBlockMinWidth {
90 Pixels(usize),
91 Text(String),
92}