///|
/// ユーザー型
pub(all) struct User {
id : String
name : String
avatar_url : String?
} derive(Show, Eq)
///|
/// メッセージ状態
pub(all) enum MessageStatus {
Sending
Sent
Delivered
Read
Failed
} derive(Show, Eq)
///|
/// メッセージコンテンツ
pub(all) enum MessageContent {
Text(String)
Markdown(String)
Image(url~ : String, caption~ : String?)
System(String)
} derive(Show, Eq)
///|
/// メッセージ(サーバーサイド版 - リアクティブシグナルなし)
pub struct Message {
id : String
sender : User
content : MessageContent
timestamp_ms : Int64
status : MessageStatus
}
///|
/// メッセージを作成
pub fn Message::new(
id : String,
sender : User,
content : MessageContent,
timestamp_ms : Int64,
status? : MessageStatus = MessageStatus::Sending,
) -> Message {
{ id, sender, content, timestamp_ms, status }
}
///|
/// メッセージステータスを更新
pub fn Message::set_status(self : Message, status : MessageStatus) -> Message {
{ ..self, status, }
}
///|
/// 不変スナップショット
pub struct MessageSnapshot {
id : String
sender : User
content : MessageContent
timestamp_ms : Int64
status : MessageStatus
} derive(Show, Eq)
///|
/// スナップショットを作成
pub fn Message::snapshot(self : Message) -> MessageSnapshot {
{
id: self.id,
sender: self.sender,
content: self.content,
timestamp_ms: self.timestamp_ms,
status: self.status,
}
}
///|
/// MessageContent::Textを作成
pub fn text_content(s : String) -> MessageContent {
MessageContent::Text(s)
}
///|
/// MessageContent::Systemを作成
pub fn system_content(s : String) -> MessageContent {
MessageContent::System(s)
}
///|
/// MessageStatus::Sentを作成
pub fn sent_status() -> MessageStatus {
MessageStatus::Sent
}
///|
/// MessageStatus::Sendingを作成
pub fn sending_status() -> MessageStatus {
MessageStatus::Sending
}