agent_tui_usecases/usecases/
diagnostics.rs1use std::sync::Arc;
4
5use crate::domain::TerminalWriteInput;
6use crate::domain::TerminalWriteOutput;
7use crate::usecases::ports::SessionError;
8use crate::usecases::ports::SessionRepository;
9
10pub trait TerminalWriteUseCase: Send + Sync {
11 fn execute(&self, input: TerminalWriteInput) -> Result<TerminalWriteOutput, SessionError>;
12}
13
14pub struct TerminalWriteUseCaseImpl<R: SessionRepository> {
15 repository: Arc<R>,
16}
17
18impl<R: SessionRepository> TerminalWriteUseCaseImpl<R> {
19 pub fn new(repository: Arc<R>) -> Self {
20 Self { repository }
21 }
22}
23
24impl<R: SessionRepository> TerminalWriteUseCase for TerminalWriteUseCaseImpl<R> {
25 fn execute(&self, input: TerminalWriteInput) -> Result<TerminalWriteOutput, SessionError> {
26 let session = self.repository.resolve(input.session_id.as_ref())?;
27 let bytes_len = input.data.len();
28 session.terminal_write(&input.data)?;
29 Ok(TerminalWriteOutput {
30 session_id: session.session_id(),
31 bytes_written: bytes_len,
32 success: true,
33 })
34 }
35}
36
37#[cfg(test)]
38#[path = "diagnostics_tests.rs"]
39mod tests;