1use serde::Serialize;
4
5use crate::detect::{self, State};
6use crate::error::Result;
7use crate::session::Session;
8use crate::tmux;
9
10#[derive(Debug, Serialize)]
11pub struct PsResult {
12 pub sessions: Vec<PsEntry>,
13}
14
15#[derive(Debug, Serialize)]
16pub struct PsEntry {
17 #[serde(flatten)]
18 pub session: Session,
19 pub alive: bool,
20 pub state: State,
21}
22
23pub fn run() -> Result<PsResult> {
24 let mut entries = Vec::new();
25 for session in Session::list()? {
26 let alive = tmux::has_session(&session.name)?;
27 let state = if alive { detect::detect(&session)? } else { State::Dead };
28 entries.push(PsEntry { session, alive, state });
29 }
30 Ok(PsResult { sessions: entries })
31}