tui_dispatch_debug/debug/
actions.rs1#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum DebugAction {
9 Toggle,
11 CopyFrame,
13 ToggleState,
15 ToggleActionLog,
17 ToggleComponents,
19 ToggleMouseCapture,
21 InspectCell { column: u16, row: u16 },
23 CloseOverlay,
25 RequestCapture,
27 ActionLogScrollUp,
29 ActionLogScrollDown,
31 ActionLogScrollTop,
33 ActionLogScrollBottom,
35 ActionLogPageUp,
37 ActionLogPageDown,
39 ActionLogShowDetail,
41 ActionLogBackToList,
43 StateTreeShowDetail,
45 StateTreeBackToTree,
47 ComponentShowDetail,
49 ComponentBackToList,
51}
52
53impl DebugAction {
54 pub const CMD_TOGGLE: &'static str = "debug.toggle";
56 pub const CMD_COPY_FRAME: &'static str = "debug.copy";
57 pub const CMD_TOGGLE_STATE: &'static str = "debug.state";
58 pub const CMD_TOGGLE_ACTION_LOG: &'static str = "debug.action_log";
59 pub const CMD_TOGGLE_COMPONENTS: &'static str = "debug.components";
60 pub const CMD_TOGGLE_MOUSE: &'static str = "debug.mouse";
61 pub const CMD_CLOSE_OVERLAY: &'static str = "debug.close";
62
63 pub fn from_command(cmd: &str) -> Option<Self> {
65 match cmd {
66 Self::CMD_TOGGLE => Some(Self::Toggle),
67 Self::CMD_COPY_FRAME => Some(Self::CopyFrame),
68 Self::CMD_TOGGLE_STATE => Some(Self::ToggleState),
69 Self::CMD_TOGGLE_ACTION_LOG => Some(Self::ToggleActionLog),
70 Self::CMD_TOGGLE_COMPONENTS => Some(Self::ToggleComponents),
71 Self::CMD_TOGGLE_MOUSE => Some(Self::ToggleMouseCapture),
72 Self::CMD_CLOSE_OVERLAY => Some(Self::CloseOverlay),
73 _ => None,
74 }
75 }
76
77 pub fn command(&self) -> Option<&'static str> {
79 match self {
80 Self::Toggle => Some(Self::CMD_TOGGLE),
81 Self::CopyFrame => Some(Self::CMD_COPY_FRAME),
82 Self::ToggleState => Some(Self::CMD_TOGGLE_STATE),
83 Self::ToggleActionLog => Some(Self::CMD_TOGGLE_ACTION_LOG),
84 Self::ToggleComponents => Some(Self::CMD_TOGGLE_COMPONENTS),
85 Self::ToggleMouseCapture => Some(Self::CMD_TOGGLE_MOUSE),
86 Self::CloseOverlay => Some(Self::CMD_CLOSE_OVERLAY),
87 Self::InspectCell { .. }
89 | Self::RequestCapture
90 | Self::ActionLogScrollUp
91 | Self::ActionLogScrollDown
92 | Self::ActionLogScrollTop
93 | Self::ActionLogScrollBottom
94 | Self::ActionLogPageUp
95 | Self::ActionLogPageDown
96 | Self::ActionLogShowDetail
97 | Self::ActionLogBackToList
98 | Self::StateTreeShowDetail
99 | Self::StateTreeBackToTree
100 | Self::ComponentShowDetail
101 | Self::ComponentBackToList => None,
102 }
103 }
104}
105
106#[derive(Debug)]
111pub enum DebugSideEffect<A> {
112 ProcessQueuedActions(Vec<A>),
117
118 CopyToClipboard(String),
122}
123
124#[cfg(test)]
125mod tests {
126 use super::*;
127
128 #[test]
129 fn test_from_command() {
130 assert_eq!(
131 DebugAction::from_command("debug.toggle"),
132 Some(DebugAction::Toggle)
133 );
134 assert_eq!(
135 DebugAction::from_command("debug.copy"),
136 Some(DebugAction::CopyFrame)
137 );
138 assert_eq!(
139 DebugAction::from_command("debug.state"),
140 Some(DebugAction::ToggleState)
141 );
142 assert_eq!(
143 DebugAction::from_command("debug.action_log"),
144 Some(DebugAction::ToggleActionLog)
145 );
146 assert_eq!(
147 DebugAction::from_command("debug.components"),
148 Some(DebugAction::ToggleComponents)
149 );
150 assert_eq!(DebugAction::from_command("unknown"), None);
151 }
152
153 #[test]
154 fn test_command_roundtrip() {
155 let actions = [
156 DebugAction::Toggle,
157 DebugAction::CopyFrame,
158 DebugAction::ToggleState,
159 DebugAction::ToggleActionLog,
160 DebugAction::ToggleComponents,
161 DebugAction::ToggleMouseCapture,
162 DebugAction::CloseOverlay,
163 ];
164
165 for action in actions {
166 let cmd = action.command().expect("should have command");
167 let parsed = DebugAction::from_command(cmd).expect("should parse");
168 assert_eq!(parsed, action);
169 }
170 }
171
172 #[test]
173 fn test_scroll_actions_no_command() {
174 assert!(DebugAction::ActionLogScrollUp.command().is_none());
176 assert!(DebugAction::ActionLogScrollDown.command().is_none());
177 assert!(DebugAction::ActionLogScrollTop.command().is_none());
178 assert!(DebugAction::ActionLogScrollBottom.command().is_none());
179 }
180}