ai_session/core/
terminal.rs1use anyhow::Result;
4
5use super::headless::HeadlessHandle;
6use super::pty::PtyHandle;
7
8pub enum TerminalHandle {
10 Pty(PtyHandle),
12 Headless(HeadlessHandle),
14}
15
16impl TerminalHandle {
17 pub async fn write(&self, data: &[u8]) -> Result<()> {
19 match self {
20 TerminalHandle::Pty(handle) => handle.write(data).await,
21 TerminalHandle::Headless(handle) => handle.write(data).await,
22 }
23 }
24
25 pub async fn read(&self) -> Result<Vec<u8>> {
27 match self {
28 TerminalHandle::Pty(handle) => handle.read().await,
29 TerminalHandle::Headless(handle) => handle.read().await,
30 }
31 }
32
33 pub async fn read_with_timeout(&self, timeout_ms: u64) -> Result<Vec<u8>> {
35 match self {
36 TerminalHandle::Pty(handle) => handle.read_with_timeout(timeout_ms).await,
37 TerminalHandle::Headless(handle) => handle.read_with_timeout(timeout_ms).await,
38 }
39 }
40
41 pub async fn is_running(&self) -> bool {
43 match self {
44 TerminalHandle::Pty(handle) => handle.is_running(),
45 TerminalHandle::Headless(handle) => handle.is_running().await,
46 }
47 }
48
49 pub async fn shutdown(self) -> Result<()> {
51 match self {
52 TerminalHandle::Pty(_handle) => Ok(()),
53 TerminalHandle::Headless(handle) => handle.shutdown().await,
54 }
55 }
56}