use crate::{ database::get_collection, util::result::{Error, Result}, }; use mongodb::bson::to_document; use serde::{Deserialize, Serialize}; /*#[derive(Serialize, Deserialize, Debug, Clone)] pub struct LastMessage { id: String, user_id: String, short_content: String, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Channel { #[serde(rename = "_id")] pub id: String, #[serde(rename = "type")] pub channel_type: u8, // DM: whether the DM is active pub active: Option<bool>, // DM + GDM: last message in channel pub last_message: Option<LastMessage>, // DM + GDM: recipients for channel pub recipients: Option<Vec<String>>, // GDM: owner of group pub owner: Option<String>, // GUILD: channel parent pub guild: Option<String>, // GUILD + GDM: channel name pub name: Option<String>, // GUILD + GDM: channel description pub description: Option<String>, }*/ #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "type")] pub enum Channel { SavedMessages { #[serde(rename = "_id")] id: String, user: String, }, DirectMessage { #[serde(rename = "_id")] id: String, active: bool, recipients: Vec<String>, }, Group { #[serde(rename = "_id")] id: String, name: String, owner: String, description: String, recipients: Vec<String>, }, } impl Channel { pub async fn save(&self) -> Result<()> { get_collection("channels") .insert_one( to_document(&self).map_err(|_| Error::DatabaseError { operation: "to_bson", with: "channel", })?, None, ) .await .map_err(|_| Error::DatabaseError { operation: "insert_one", with: "channel", })?; Ok(()) } }