use std::fmt::Display; use bson::Document; use poise::serenity_prelude::PermissionOverwrite; use serde::{Deserialize, Serialize}; use serde_with_macros::skip_serializing_none; // Models #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Default)] pub struct Muted { pub user_id: Option, pub guild_id: Option, pub taken_roles: Option>, pub expires: Option, pub reason: Option, } #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Default)] pub struct LockedChannel { pub channel_id: Option, pub overwrites: Option>, } #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Default)] pub struct Poll { pub author: Option, pub image_url: Option, pub votes: Option, } #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Default)] pub struct PollAuthor { pub name: Option, pub id: Option, } impl From for Document { fn from(muted: Muted) -> Self { to_document(&muted) } } impl From for Document { fn from(locked: LockedChannel) -> Self { to_document(&locked) } } fn to_document(t: &T) -> Document where T: Serialize, { bson::to_document(t).unwrap() } // Display trait impl Display for Muted { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "muted") } }