Skip to main content

rship_entities/
event_track.rs

1use serde::{Deserialize, Serialize};
2#[cfg(feature = "mods")]
3use {
4    myko_macros::Eventable, //
5    partially::Partial,
6};
7
8#[derive(Clone, Debug, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10#[cfg_attr(feature = "mods", derive(Partial, PartialEq, Eventable))]
11#[cfg_attr(
12    feature = "mods",
13    partially(derive(Clone, Serialize, Deserialize, Default))
14)]
15pub struct EventTrack {
16    pub id: String,
17    pub hash: String,
18    pub name: String,
19    pub locked: bool,
20    pub source_mode: EventTrackSourceMode,
21    pub time_mode: EventTrackTimeMode,
22}
23
24#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "camelCase")]
26pub struct BeatTimeModeData {
27    measure: u64,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
31#[serde(rename_all = "camelCase")]
32pub struct FrameTimeModeData {
33    rate: u64,
34}
35
36#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
37#[serde(tag = "type")]
38#[serde(rename_all = "camelCase")]
39pub enum EventTrackTimeMode {
40    Clock,
41    Beat(BeatTimeModeData),
42    Frame(FrameTimeModeData),
43}
44
45#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
46#[serde(rename_all = "camelCase")]
47pub struct SourcedSourceModeData {
48    pub service_id: String,
49}
50#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
51#[serde(rename_all = "camelCase")]
52pub struct ScopedSourceModeData {
53    pub scope_id: String,
54}
55
56#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
57#[serde(tag = "type")]
58#[serde(rename_all = "camelCase")]
59pub enum EventTrackSourceMode {
60    Sourced(SourcedSourceModeData),
61    Scoped(ScopedSourceModeData),
62}