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}