1use serde::{Deserialize, Serialize};
4
5use crate::ids::{AgentPubkey, ChannelId, MessageId, Seq};
6
7#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
14#[serde(rename_all = "lowercase")]
15pub enum ChannelKind {
16 #[default]
17 Public,
18 Private,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
22pub struct Channel {
23 pub channel_id: ChannelId,
24 pub name: Option<String>,
25 pub kind: ChannelKind,
26 pub created_by: AgentPubkey,
27 pub created_at: i64,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
39#[serde(rename_all = "snake_case")]
40pub enum MessageType {
41 Text,
42 MlsApplication,
43 MlsCommit,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
47pub struct Message {
48 pub message_id: MessageId,
49 pub channel: ChannelId,
50 pub author: AgentPubkey,
51 pub seq: Seq,
52 #[serde(rename = "type")]
53 pub kind: MessageType,
54 pub content: String,
55 pub created_at: i64,
56}