1use crate::config::KeyboardProtocolConfig;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum SessionSurface {
6 #[default]
7 Auto,
8 Alternate,
9 Inline,
10}
11
12impl From<SessionSurface> for crate::config::UiSurfacePreference {
13 fn from(value: SessionSurface) -> Self {
14 match value {
15 SessionSurface::Auto => Self::Auto,
16 SessionSurface::Alternate => Self::Alternate,
17 SessionSurface::Inline => Self::Inline,
18 }
19 }
20}
21
22impl From<crate::config::UiSurfacePreference> for SessionSurface {
23 fn from(value: crate::config::UiSurfacePreference) -> Self {
24 match value {
25 crate::config::UiSurfacePreference::Auto => Self::Auto,
26 crate::config::UiSurfacePreference::Alternate => Self::Alternate,
27 crate::config::UiSurfacePreference::Inline => Self::Inline,
28 }
29 }
30}
31
32#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct KeyboardProtocolSettings {
35 pub enabled: bool,
36 pub mode: String,
37 pub disambiguate_escape_codes: bool,
38 pub report_event_types: bool,
39 pub report_alternate_keys: bool,
40 pub report_all_keys: bool,
41}
42
43impl Default for KeyboardProtocolSettings {
44 fn default() -> Self {
45 Self::from(KeyboardProtocolConfig::default())
46 }
47}
48
49impl From<KeyboardProtocolConfig> for KeyboardProtocolSettings {
50 fn from(value: KeyboardProtocolConfig) -> Self {
51 Self {
52 enabled: value.enabled,
53 mode: value.mode,
54 disambiguate_escape_codes: value.disambiguate_escape_codes,
55 report_event_types: value.report_event_types,
56 report_alternate_keys: value.report_alternate_keys,
57 report_all_keys: value.report_all_keys,
58 }
59 }
60}
61
62impl From<KeyboardProtocolSettings> for KeyboardProtocolConfig {
63 fn from(value: KeyboardProtocolSettings) -> Self {
64 Self {
65 enabled: value.enabled,
66 mode: value.mode,
67 disambiguate_escape_codes: value.disambiguate_escape_codes,
68 report_event_types: value.report_event_types,
69 report_alternate_keys: value.report_alternate_keys,
70 report_all_keys: value.report_all_keys,
71 }
72 }
73}
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78
79 #[test]
80 fn session_surface_conversion_roundtrip() {
81 let variants = [
82 SessionSurface::Auto,
83 SessionSurface::Alternate,
84 SessionSurface::Inline,
85 ];
86
87 for variant in variants {
88 let converted: crate::config::UiSurfacePreference = variant.into();
89 let roundtrip = SessionSurface::from(converted);
90 assert_eq!(variant, roundtrip);
91 }
92 }
93
94 #[test]
95 fn keyboard_protocol_conversion_roundtrip() {
96 let settings = KeyboardProtocolSettings {
97 enabled: true,
98 mode: "custom".to_string(),
99 disambiguate_escape_codes: true,
100 report_event_types: false,
101 report_alternate_keys: true,
102 report_all_keys: false,
103 };
104
105 let config: KeyboardProtocolConfig = settings.clone().into();
106 let restored = KeyboardProtocolSettings::from(config);
107
108 assert_eq!(settings, restored);
109 }
110}