Skip to main content

vtcode_core/core/interfaces/
ui.rs

1use async_trait::async_trait;
2
3use crate::ui::tui::{InlineEvent, InlineHandle, InlineSession};
4
5/// Common contract for interactive inline UI sessions.
6#[async_trait]
7pub trait UiSession {
8    fn inline_handle(&self) -> &InlineHandle;
9
10    fn clone_inline_handle(&self) -> InlineHandle {
11        self.inline_handle().clone()
12    }
13
14    fn defer_event(&self, event: InlineEvent) -> anyhow::Result<()> {
15        self.inline_handle().defer_event(event)
16    }
17
18    fn has_deferred_event(&self) -> bool {
19        self.inline_handle().has_deferred_event()
20    }
21
22    async fn next_event(&mut self) -> Option<InlineEvent>;
23
24    fn request_redraw(&self) {
25        self.inline_handle().force_redraw();
26    }
27
28    fn shutdown(&self) {
29        self.inline_handle().shutdown();
30    }
31}
32
33#[async_trait]
34impl UiSession for InlineSession {
35    fn inline_handle(&self) -> &InlineHandle {
36        &self.handle
37    }
38
39    async fn next_event(&mut self) -> Option<InlineEvent> {
40        InlineSession::next_event(self).await
41    }
42}