everruns_core/
agent_identity.rs1use chrono::{DateTime, Utc};
9use serde::{Deserialize, Serialize};
10
11use crate::principal::PrincipalSummary;
12use crate::typed_id::AgentIdentityId;
13
14#[cfg(feature = "openapi")]
15use utoipa::ToSchema;
16
17#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
19#[cfg_attr(feature = "openapi", derive(ToSchema))]
20#[serde(rename_all = "lowercase")]
21pub enum AgentIdentityStatus {
22 Active,
23 Archived,
24 Deleted,
25}
26
27impl std::fmt::Display for AgentIdentityStatus {
28 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29 match self {
30 AgentIdentityStatus::Active => write!(f, "active"),
31 AgentIdentityStatus::Archived => write!(f, "archived"),
32 AgentIdentityStatus::Deleted => write!(f, "deleted"),
33 }
34 }
35}
36
37impl From<&str> for AgentIdentityStatus {
38 fn from(value: &str) -> Self {
39 match value {
40 "archived" => Self::Archived,
41 "deleted" => Self::Deleted,
42 _ => Self::Active,
43 }
44 }
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49#[cfg_attr(feature = "openapi", derive(ToSchema))]
50pub struct AgentIdentity {
51 #[serde(rename = "id")]
53 #[cfg_attr(feature = "openapi", schema(value_type = String, example = "identity_01933b5a000070008000000000000001"))]
54 pub id: AgentIdentityId,
55 pub name: String,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub description: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub principal: Option<PrincipalSummary>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub effective_owner: Option<PrincipalSummary>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub avatar_url: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub locale: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub timezone: Option<String>,
75 pub status: AgentIdentityStatus,
77 pub created_at: DateTime<Utc>,
79 pub updated_at: DateTime<Utc>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub archived_at: Option<DateTime<Utc>>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub deleted_at: Option<DateTime<Utc>>,
87}