swaybar_types/
header.rs

1use serde::{Deserialize, Serialize};
2use std::convert::TryFrom;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Header {
6    pub version: Version,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub stop_signal: Option<u32>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub cont_signal: Option<u32>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub click_events: Option<bool>,
13}
14
15#[repr(u8)]
16#[non_exhaustive]
17#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
18#[serde(try_from = "u8")]
19#[serde(into = "u8")]
20pub enum Version {
21    One = 1,
22}
23
24impl From<Version> for u8 {
25    fn from(version: Version) -> Self {
26        version as u8
27    }
28}
29
30impl TryFrom<u8> for Version {
31    type Error = String;
32
33    fn try_from(value: u8) -> Result<Self, Self::Error> {
34        Ok(match value {
35            1 => Version::One,
36            _ => return Err(format!("invalid version number '{}'", value)),
37        })
38    }
39}