diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-06-26 15:24:40 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-06-27 14:13:49 -0500 |
commit | 712f381b1ba65d40e03e530b871e34a73dbb615d (patch) | |
tree | c98a1a692877c9b29c84824ded789d9235331542 /src/i3bar.rs | |
parent | 07038dc2c3221336e60d31f2b2bd2590c30e3ec7 (diff) |
feat: add color module
Diffstat (limited to 'src/i3bar.rs')
-rw-r--r-- | src/i3bar.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/i3bar.rs b/src/i3bar.rs new file mode 100644 index 0000000..8cf5f0c --- /dev/null +++ b/src/i3bar.rs @@ -0,0 +1,80 @@ +use serde::Serialize; + +use crate::color::Color; + +/// Represent block as described in <https://i3wm.org/docs/i3bar-protocol.html> +#[derive(Serialize, Debug, Clone)] +pub struct Block { + pub full_text: String, + #[serde(skip_serializing_if = "String::is_empty")] + pub short_text: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub color: Option<Color>, + #[serde(skip_serializing_if = "Option::is_none")] + pub background: Option<Color>, + #[serde(skip_serializing_if = "Option::is_none")] + pub border: Option<Color>, + #[serde(skip_serializing_if = "Option::is_none")] + pub border_top: Option<usize>, + #[serde(skip_serializing_if = "Option::is_none")] + pub border_right: Option<usize>, + #[serde(skip_serializing_if = "Option::is_none")] + pub border_bottom: Option<usize>, + #[serde(skip_serializing_if = "Option::is_none")] + pub border_left: Option<usize>, + #[serde(skip_serializing_if = "Option::is_none")] + pub min_width: Option<MinWidth>, + #[serde(skip_serializing_if = "Option::is_none")] + pub align: Option<Align>, + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option<String>, + #[serde(skip_serializing_if = "String::is_empty")] + pub instance: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub urgent: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub separator: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub separator_block_width: Option<usize>, + #[serde(skip_serializing_if = "Option::is_none")] + pub markup: Option<String>, +} + +impl Default for Block { + fn default() -> Self { + Self { + full_text: String::new(), + short_text: String::new(), + color: None, + background: None, + border: None, + border_top: None, + border_right: None, + border_bottom: None, + border_left: None, + min_width: None, + align: None, + name: None, + instance: String::new(), + urgent: None, + separator: Some(false), + separator_block_width: Some(0), + markup: Some("pango".to_string()), + } + } +} + +#[derive(Serialize, Debug, Clone, Copy)] +#[serde(rename_all = "lowercase")] +pub enum Align { + Center, + Right, + Left, +} + +#[derive(Serialize, Debug, Clone)] +#[serde(untagged)] +pub enum MinWidth { + Pixels(usize), + Text(String), +} |