diff options
Diffstat (limited to 'src/i3bar.rs')
-rw-r--r-- | src/i3bar.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/i3bar.rs b/src/i3bar.rs index 28306e0..b69095e 100644 --- a/src/i3bar.rs +++ b/src/i3bar.rs @@ -38,6 +38,9 @@ pub struct Block { pub separator_block_width: Option<usize>, #[serde(skip_serializing_if = "Option::is_none")] pub markup: Option<String>, + + #[serde(skip)] + pub enabled: bool, } impl Block { @@ -64,11 +67,29 @@ impl Align { } } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[serde(untagged)] pub enum MinWidth { Pixels(usize), - Text(String), + #[serde(with = "min_width_serde")] + Text(usize), +} +mod min_width_serde { + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + + pub(super) fn serialize<S>(value: &usize, s: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + "x".repeat(*value).serialize(s) + } + + pub(super) fn deserialize<'de, D>(d: D) -> Result<usize, D::Error> + where + D: Deserializer<'de>, + { + Ok(String::deserialize(d)?.len()) + } } #[derive(Debug, Default, Clone, Serialize, Deserialize)] |