Skip to main content

lilo_rm_core/
capture.rs

1use std::path::PathBuf;
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
7#[serde(tag = "type", content = "payload", rename_all = "snake_case")]
8pub enum LogAvailability {
9    Headless {
10        stdout_path: PathBuf,
11        stderr_path: PathBuf,
12    },
13    TmuxPaneSnapshot,
14    Unavailable {
15        reason: LogsUnavailableReason,
16    },
17}
18
19#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
20#[serde(rename_all = "snake_case")]
21pub enum LogsUnavailableReason {
22    TmuxTarget,
23    CaptureDisabled,
24    PaneUnavailable,
25    PipeInUse,
26    RecorderFailed,
27}
28
29#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
30pub struct CaptureRequest {
31    pub session_id: Uuid,
32    #[serde(default, skip_serializing_if = "Option::is_none")]
33    pub scrollback_lines: Option<u32>,
34}
35
36#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
37pub struct PaneSnapshot {
38    pub content: String,
39    pub captured_at_ms: u64,
40    pub scrollback_lines_requested: u32,
41    pub scrollback_lines_included: u32,
42    pub pane_history_lines: u32,
43}
44
45#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
46#[non_exhaustive]
47#[serde(tag = "type", content = "payload", rename_all = "snake_case")]
48pub enum CaptureError {
49    NotATmuxTarget,
50    PaneUnavailable,
51    SessionMissing,
52    TmuxNotAvailable,
53    CapturePaneFailed { stderr: String },
54}
55
56#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
57#[non_exhaustive]
58#[serde(tag = "status", content = "payload", rename_all = "snake_case")]
59pub enum CaptureResponse {
60    Captured(PaneSnapshot),
61    Failed(CaptureError),
62}
63
64impl CaptureResponse {
65    pub fn into_result(self) -> Result<PaneSnapshot, CaptureError> {
66        match self {
67            Self::Captured(snapshot) => Ok(snapshot),
68            Self::Failed(error) => Err(error),
69        }
70    }
71}