shared/domain/jig/
player.rs1use std::ops::Deref;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Clone, Debug)]
9#[serde(rename_all = "camelCase")]
10pub struct JigPlayerSettings {
11 #[serde(default)]
13 pub direction: TextDirection,
14 #[serde(default)]
16 pub scoring: bool,
17 #[serde(default)]
19 pub drag_assist: bool,
20}
21
22impl Default for JigPlayerSettings {
23 fn default() -> Self {
24 Self {
25 direction: TextDirection::default(),
26 scoring: false,
27 drag_assist: false,
28 }
29 }
30}
31
32#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
34#[cfg_attr(feature = "backend", derive(sqlx::Type))]
35#[repr(i16)]
36pub enum TextDirection {
37 #[serde(rename = "ltr")]
39 LeftToRight = 0,
40
41 #[serde(rename = "rtl")]
43 RightToLeft = 1,
44}
45
46impl Default for TextDirection {
47 fn default() -> Self {
48 Self::LeftToRight
49 }
50}
51
52impl TextDirection {
53 pub fn is_ltr(&self) -> bool {
55 self == &Self::LeftToRight
56 }
57
58 pub fn is_rtl(&self) -> bool {
60 self == &Self::RightToLeft
61 }
62}
63
64#[derive(Clone, Default, Serialize, Deserialize, Debug, Eq, PartialEq)]
65pub struct ModuleConfig {
67 pub navigation_handler: PlayerNavigationHandler,
69 pub timer: Option<Seconds>,
71}
72
73#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
74pub enum PlayerNavigationHandler {
76 Player,
78 Module,
80}
81
82impl Default for PlayerNavigationHandler {
83 fn default() -> Self {
84 Self::Player
85 }
86}
87
88#[derive(Clone, Serialize, Deserialize, Debug, Eq, PartialEq)]
89pub struct Seconds(pub u32);
91
92impl Deref for Seconds {
93 type Target = u32;
94
95 fn deref(&self) -> &Self::Target {
96 &self.0
97 }
98}