thfmr_protocol/message/
mod.rs

1#[cfg(test)]
2mod tests;
3
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
8pub struct Song {
9    pub file: String,
10    pub start: Timestamp,
11    pub stop: Timestamp,
12}
13
14pub type Deck = u8;
15pub type Timestamp = u64;
16
17#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
18pub struct Loaded {
19    pub deck: Deck,
20    #[serde(flatten)]
21    pub song: Song,
22}
23
24#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
25pub struct Transport {
26    pub deck: Deck,
27    pub position: Timestamp,
28    pub length: Timestamp,
29}
30
31#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
32pub struct Meta {
33    pub meta: HashMap<String, String>,
34}
35
36#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
37#[serde(tag = "type")]
38pub enum Message {
39    Want,
40    Skip,
41    Status,
42    Quit,
43    Next(Song),
44    Loaded(Loaded),
45    Playing(Transport),
46    Stopped(Transport),
47    MetaInfo(Meta),
48}