everruns_core/
session_resource.rs1use chrono::{DateTime, Utc};
13use serde::{Deserialize, Serialize};
14
15use crate::typed_id::SessionId;
16
17#[cfg(feature = "openapi")]
18use utoipa::ToSchema;
19
20#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
22#[cfg_attr(feature = "openapi", derive(ToSchema))]
23#[serde(rename_all = "snake_case")]
24pub enum SessionResourceStatus {
25 Active,
27 Completed,
29 Failed,
31 Released,
33}
34
35impl std::fmt::Display for SessionResourceStatus {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 match self {
38 Self::Active => write!(f, "active"),
39 Self::Completed => write!(f, "completed"),
40 Self::Failed => write!(f, "failed"),
41 Self::Released => write!(f, "released"),
42 }
43 }
44}
45
46impl From<&str> for SessionResourceStatus {
47 fn from(s: &str) -> Self {
48 match s {
49 "active" => Self::Active,
50 "completed" => Self::Completed,
51 "failed" => Self::Failed,
52 "released" => Self::Released,
53 _ => Self::Active,
54 }
55 }
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[cfg_attr(feature = "openapi", derive(ToSchema))]
61pub struct SessionResourceEntry {
62 pub resource_id: String,
64 #[cfg_attr(feature = "openapi", schema(value_type = String))]
66 pub session_id: SessionId,
67 pub kind: String,
69 pub display_name: String,
71 pub status: SessionResourceStatus,
73 #[serde(default)]
75 pub metadata: serde_json::Value,
76 pub created_at: DateTime<Utc>,
77 pub updated_at: DateTime<Utc>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct RegisterSessionResource {
83 pub session_id: SessionId,
84 pub resource_id: String,
86 pub kind: String,
88 pub display_name: String,
90 #[serde(default = "default_active")]
92 pub status: SessionResourceStatus,
93 #[serde(default)]
95 pub metadata: serde_json::Value,
96}
97
98fn default_active() -> SessionResourceStatus {
99 SessionResourceStatus::Active
100}
101
102#[derive(Debug, Clone, Default)]
104pub struct SessionResourceFilter {
105 pub kind: Option<String>,
107 pub status: Option<SessionResourceStatus>,
109}