Skip to main content

agent_id_cli/
activity.rs

1use std::fmt;
2
3use chrono::{DateTime, Utc};
4use clap::ValueEnum;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, ValueEnum)]
8#[serde(rename_all = "snake_case")]
9pub enum ActivityStateValue {
10    Working,
11    Idle,
12    Waiting,
13    Blocked,
14    Stopped,
15    Unknown,
16}
17
18impl ActivityStateValue {
19    pub fn from_external(value: &str) -> Self {
20        match value {
21            "working" => Self::Working,
22            "idle" => Self::Idle,
23            "waiting" => Self::Waiting,
24            "blocked" => Self::Blocked,
25            "stopped" => Self::Stopped,
26            _ => Self::Unknown,
27        }
28    }
29}
30
31impl fmt::Display for ActivityStateValue {
32    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
33        let value = match self {
34            Self::Working => "working",
35            Self::Idle => "idle",
36            Self::Waiting => "waiting",
37            Self::Blocked => "blocked",
38            Self::Stopped => "stopped",
39            Self::Unknown => "unknown",
40        };
41        formatter.write_str(value)
42    }
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
46pub struct ActivityState {
47    pub value: ActivityStateValue,
48    pub updated_at: DateTime<Utc>,
49}
50
51impl ActivityState {
52    pub fn unknown(updated_at: DateTime<Utc>) -> Self {
53        Self {
54            value: ActivityStateValue::Unknown,
55            updated_at,
56        }
57    }
58
59    pub fn from_external(value: &str, updated_at: DateTime<Utc>) -> Self {
60        Self {
61            value: ActivityStateValue::from_external(value),
62            updated_at,
63        }
64    }
65}