agent-tui-usecases 1.1.0

Use cases and ports for agent-tui terminal automation
Documentation
//! Diagnostics use case.

use std::sync::Arc;

use crate::domain::TerminalWriteInput;
use crate::domain::TerminalWriteOutput;
use crate::usecases::ports::SessionError;
use crate::usecases::ports::SessionRepository;

pub trait TerminalWriteUseCase: Send + Sync {
    fn execute(&self, input: TerminalWriteInput) -> Result<TerminalWriteOutput, SessionError>;
}

pub struct TerminalWriteUseCaseImpl<R: SessionRepository> {
    repository: Arc<R>,
}

impl<R: SessionRepository> TerminalWriteUseCaseImpl<R> {
    pub fn new(repository: Arc<R>) -> Self {
        Self { repository }
    }
}

impl<R: SessionRepository> TerminalWriteUseCase for TerminalWriteUseCaseImpl<R> {
    fn execute(&self, input: TerminalWriteInput) -> Result<TerminalWriteOutput, SessionError> {
        let session = self.repository.resolve(input.session_id.as_ref())?;
        let bytes_len = input.data.len();
        session.terminal_write(&input.data)?;
        Ok(TerminalWriteOutput {
            session_id: session.session_id(),
            bytes_written: bytes_len,
            success: true,
        })
    }
}

#[cfg(test)]
#[path = "diagnostics_tests.rs"]
mod tests;