use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub id: String,
pub channel_id: String,
pub author_id: String,
pub author_name: String,
pub content: String,
pub timestamp: DateTime<Utc>,
pub platform: String,
#[serde(default)]
pub metadata: serde_json::Value,
}
impl Message {
pub fn new(
id: impl Into<String>,
channel_id: impl Into<String>,
author_id: impl Into<String>,
author_name: impl Into<String>,
content: impl Into<String>,
platform: impl Into<String>,
) -> Self {
Self {
id: id.into(),
channel_id: channel_id.into(),
author_id: author_id.into(),
author_name: author_name.into(),
content: content.into(),
timestamp: Utc::now(),
platform: platform.into(),
metadata: serde_json::Value::Null,
}
}
pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self {
self.metadata = metadata;
self
}
pub fn with_timestamp(mut self, timestamp: DateTime<Utc>) -> Self {
self.timestamp = timestamp;
self
}
}