use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum Presentation {
Card(rho_tools::tool_card::ToolCard),
SummaryCard(rho_tools::tool_card::ToolCard),
#[serde(rename = "message")]
Notification(Box<NotificationCard>),
}
impl From<rho_tools::tool_card::ToolCard> for Presentation {
fn from(card: rho_tools::tool_card::ToolCard) -> Self {
Self::Card(card)
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub(crate) struct NotificationCard {
pub title: String,
pub sender: String,
pub recipient: String,
pub delivery: NotificationDelivery,
#[serde(default)]
pub tone: NotificationTone,
#[serde(default)]
pub preview: NotificationPreview,
#[serde(default)]
pub visibility: NotificationVisibility,
#[serde(default)]
pub reference: Option<String>,
#[serde(default)]
pub subtitle: Option<String>,
pub body: String,
pub details: Vec<String>,
}
pub(crate) fn parent_message_card(
body: String,
delivery: NotificationDelivery,
detail: String,
) -> NotificationCard {
NotificationCard {
title: "Message from parent".into(),
sender: "parent".into(),
recipient: "agent".into(),
delivery,
tone: NotificationTone::Neutral,
preview: NotificationPreview::Full,
visibility: NotificationVisibility::Conversation,
reference: None,
subtitle: None,
body,
details: vec![detail],
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum NotificationDelivery {
Queued,
Received,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum NotificationTone {
#[default]
Neutral,
Accent,
Success,
Warning,
Error,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum NotificationPreview {
#[default]
Truncated,
Full,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum NotificationVisibility {
#[default]
Activity,
Conversation,
}