use serde::{Deserialize, Serialize};
use crate::ids::{AgentPubkey, ChannelId, MessageId, Seq};
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ChannelKind {
#[default]
Public,
Private,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Channel {
pub channel_id: ChannelId,
pub name: Option<String>,
pub kind: ChannelKind,
pub created_by: AgentPubkey,
pub created_at: i64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MessageType {
Text,
MlsApplication,
MlsCommit,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Message {
pub message_id: MessageId,
pub channel: ChannelId,
pub author: AgentPubkey,
pub seq: Seq,
#[serde(rename = "type")]
pub kind: MessageType,
pub content: String,
pub created_at: i64,
}