summaryrefslogtreecommitdiffstats
path: root/src/i3bar.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/i3bar.rs')
-rw-r--r--src/i3bar.rs25
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)]