thfmr_protocol/message/
mod.rs1#[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}