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    async fn next_event(&mut self) -> Option<InlineEvent>;
15
16    fn request_redraw(&self) {
17        self.inline_handle().force_redraw();
18    }
19
20    fn shutdown(&self) {
21        self.inline_handle().shutdown();
22    }
23}
24
25#[async_trait]
26impl UiSession for InlineSession {
27    fn inline_handle(&self) -> &InlineHandle {
28        &self.handle
29    }
30
31    async fn next_event(&mut self) -> Option<InlineEvent> {
32        self.events.recv().await
33    }
34}