use anyhow::Result;
use super::headless::HeadlessHandle;
use super::pty::PtyHandle;
pub enum TerminalHandle {
Pty(PtyHandle),
Headless(HeadlessHandle),
}
impl TerminalHandle {
pub async fn write(&self, data: &[u8]) -> Result<()> {
match self {
TerminalHandle::Pty(handle) => handle.write(data).await,
TerminalHandle::Headless(handle) => handle.write(data).await,
}
}
pub async fn read(&self) -> Result<Vec<u8>> {
match self {
TerminalHandle::Pty(handle) => handle.read().await,
TerminalHandle::Headless(handle) => handle.read().await,
}
}
pub async fn read_with_timeout(&self, timeout_ms: u64) -> Result<Vec<u8>> {
match self {
TerminalHandle::Pty(handle) => handle.read_with_timeout(timeout_ms).await,
TerminalHandle::Headless(handle) => handle.read_with_timeout(timeout_ms).await,
}
}
pub async fn is_running(&self) -> bool {
match self {
TerminalHandle::Pty(handle) => handle.is_running(),
TerminalHandle::Headless(handle) => handle.is_running().await,
}
}
pub async fn shutdown(self) -> Result<()> {
match self {
TerminalHandle::Pty(_handle) => Ok(()),
TerminalHandle::Headless(handle) => handle.shutdown().await,
}
}
}