vtcode_core/core/interfaces/
ui.rs1use async_trait::async_trait;
2
3use crate::ui::tui::{InlineEvent, InlineHandle, InlineSession};
4
5#[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}