use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum AuthorKind {
Human,
MainAgent,
SubAgent,
System,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct AuthorRef {
pub kind: AuthorKind,
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
}
impl AuthorRef {
pub fn human(id: impl Into<String>) -> Self {
Self {
kind: AuthorKind::Human,
id: id.into(),
display_name: None,
}
}
pub fn main_agent(id: impl Into<String>) -> Self {
Self {
kind: AuthorKind::MainAgent,
id: id.into(),
display_name: None,
}
}
pub fn sub_agent(id: impl Into<String>) -> Self {
Self {
kind: AuthorKind::SubAgent,
id: id.into(),
display_name: None,
}
}
pub fn system(id: impl Into<String>) -> Self {
Self {
kind: AuthorKind::System,
id: id.into(),
display_name: None,
}
}
}