tui_dispatch_core/debug/
actions.rs1#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum DebugAction {
9 Toggle,
11 CopyFrame,
13 ToggleState,
15 ToggleActionLog,
17 ToggleMouseCapture,
19 InspectCell { column: u16, row: u16 },
21 CloseOverlay,
23 RequestCapture,
25 ActionLogScrollUp,
27 ActionLogScrollDown,
29 ActionLogScrollTop,
31 ActionLogScrollBottom,
33}
34
35impl DebugAction {
36 pub const CMD_TOGGLE: &'static str = "debug.toggle";
38 pub const CMD_COPY_FRAME: &'static str = "debug.copy";
39 pub const CMD_TOGGLE_STATE: &'static str = "debug.state";
40 pub const CMD_TOGGLE_ACTION_LOG: &'static str = "debug.action_log";
41 pub const CMD_TOGGLE_MOUSE: &'static str = "debug.mouse";
42 pub const CMD_CLOSE_OVERLAY: &'static str = "debug.close";
43
44 pub fn from_command(cmd: &str) -> Option<Self> {
46 match cmd {
47 Self::CMD_TOGGLE => Some(Self::Toggle),
48 Self::CMD_COPY_FRAME => Some(Self::CopyFrame),
49 Self::CMD_TOGGLE_STATE => Some(Self::ToggleState),
50 Self::CMD_TOGGLE_ACTION_LOG => Some(Self::ToggleActionLog),
51 Self::CMD_TOGGLE_MOUSE => Some(Self::ToggleMouseCapture),
52 Self::CMD_CLOSE_OVERLAY => Some(Self::CloseOverlay),
53 _ => None,
54 }
55 }
56
57 pub fn command(&self) -> Option<&'static str> {
59 match self {
60 Self::Toggle => Some(Self::CMD_TOGGLE),
61 Self::CopyFrame => Some(Self::CMD_COPY_FRAME),
62 Self::ToggleState => Some(Self::CMD_TOGGLE_STATE),
63 Self::ToggleActionLog => Some(Self::CMD_TOGGLE_ACTION_LOG),
64 Self::ToggleMouseCapture => Some(Self::CMD_TOGGLE_MOUSE),
65 Self::CloseOverlay => Some(Self::CMD_CLOSE_OVERLAY),
66 Self::InspectCell { .. }
68 | Self::RequestCapture
69 | Self::ActionLogScrollUp
70 | Self::ActionLogScrollDown
71 | Self::ActionLogScrollTop
72 | Self::ActionLogScrollBottom => None,
73 }
74 }
75}
76
77#[derive(Debug)]
82pub enum DebugSideEffect<A> {
83 ProcessQueuedActions(Vec<A>),
88
89 CopyToClipboard(String),
93
94 EnableMouseCapture,
98
99 DisableMouseCapture,
103}
104
105#[cfg(test)]
106mod tests {
107 use super::*;
108
109 #[test]
110 fn test_from_command() {
111 assert_eq!(
112 DebugAction::from_command("debug.toggle"),
113 Some(DebugAction::Toggle)
114 );
115 assert_eq!(
116 DebugAction::from_command("debug.copy"),
117 Some(DebugAction::CopyFrame)
118 );
119 assert_eq!(
120 DebugAction::from_command("debug.state"),
121 Some(DebugAction::ToggleState)
122 );
123 assert_eq!(
124 DebugAction::from_command("debug.action_log"),
125 Some(DebugAction::ToggleActionLog)
126 );
127 assert_eq!(DebugAction::from_command("unknown"), None);
128 }
129
130 #[test]
131 fn test_command_roundtrip() {
132 let actions = [
133 DebugAction::Toggle,
134 DebugAction::CopyFrame,
135 DebugAction::ToggleState,
136 DebugAction::ToggleActionLog,
137 DebugAction::ToggleMouseCapture,
138 DebugAction::CloseOverlay,
139 ];
140
141 for action in actions {
142 let cmd = action.command().expect("should have command");
143 let parsed = DebugAction::from_command(cmd).expect("should parse");
144 assert_eq!(parsed, action);
145 }
146 }
147
148 #[test]
149 fn test_scroll_actions_no_command() {
150 assert!(DebugAction::ActionLogScrollUp.command().is_none());
152 assert!(DebugAction::ActionLogScrollDown.command().is_none());
153 assert!(DebugAction::ActionLogScrollTop.command().is_none());
154 assert!(DebugAction::ActionLogScrollBottom.command().is_none());
155 }
156}