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