use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::channel::MessageReceipt;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ChannelConnectionResult {
pub status: String,
pub restart_required: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub auth_action: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelDisconnectResult {
pub channel: String,
pub auth_mode: super::definitions::ChannelAuthMode,
pub disconnected: bool,
pub restart_required: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_chunks_deleted: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
impl Default for ChannelDisconnectResult {
fn default() -> Self {
Self {
channel: String::new(),
auth_mode: super::definitions::ChannelAuthMode::ApiKey,
disconnected: false,
restart_required: false,
memory_chunks_deleted: None,
message: None,
raw: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ChannelStatusEntry {
pub channel_id: String,
pub auth_mode: super::definitions::ChannelAuthMode,
pub connected: bool,
pub has_credentials: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ChannelAccountState {
Linked,
NotLinked,
Configured,
NotConfigured,
Enabled,
Disabled,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelLastDisconnect {
pub at_unix_ms: u64,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub logged_out: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelAccountSnapshot {
pub channel_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
pub states: Vec<ChannelAccountState>,
pub reconnect_attempts: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_disconnect: Option<ChannelLastDisconnect>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_state: Option<String>,
pub restart_pending: bool,
}
impl Default for ChannelAccountSnapshot {
fn default() -> Self {
Self {
channel_id: String::new(),
account_id: None,
states: vec![ChannelAccountState::NotConfigured],
reconnect_attempts: 0,
last_disconnect: None,
health_state: None,
restart_pending: false,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ChannelTestResult {
pub success: bool,
pub message: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelSendMessageResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub receipt: Option<MessageReceipt>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelReactionResult {
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelThreadResult {
pub thread_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelThreadEntry {
pub thread_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct ChannelThreadListResult {
pub threads: Vec<ChannelThreadEntry>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct TelegramLoginStartResult {
pub link_token: String,
pub telegram_url: String,
pub bot_username: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct TelegramLoginCheckResult {
pub linked: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub details: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct DiscordLinkStartResult {
pub link_token: String,
pub instructions: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct DiscordLinkCheckResult {
pub linked: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub details: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct DiscordGuildEntry {
pub id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct DiscordGuildListResult {
pub guilds: Vec<DiscordGuildEntry>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct DiscordChannelEntry {
pub id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct DiscordChannelListResult {
pub channels: Vec<DiscordChannelEntry>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "camelCase")]
pub struct DiscordPermissionCheckResult {
pub can_send_messages: bool,
pub missing_permissions: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<Value>,
}