use crate::databases;
use std::fmt::{Debug, Formatter, Error};
use databases::{Database, DatabaseManager};
use serenity::model::id::GuildId;
use serenity::builder::CreateEmbed;
#[path = "./events.rs"] pub mod events;
pub struct Environment<'a, Manager: DatabaseManager<DB>, DB: Database> {
pub embed: Option<CreateEmbed>,
pub database_manager: Manager,
pub guild_id: GuildId,
pub target: String,
pub attachments: Vec<String>,
pub event_info: events::EventType,
pub discord_context: &'a serenity::client::Context,
pub delete_option: Option<std::time::Duration>,
pub reactions_to_add: Vec<serenity::model::channel::ReactionType>,
_phantom: std::marker::PhantomData<DB>,
}
impl<'a, Manager: DatabaseManager<DB>, DB: Database> Environment<'a, Manager, DB> {
pub fn new(event_info: events::EventType, guild_id: GuildId, context: &'a serenity::client::Context, db_manager: Manager) -> Self {
return Self {
embed: None,
target: String::new(),
database_manager: db_manager,
guild_id: guild_id,
attachments: Vec::new(),
event_info: event_info,
discord_context: context,
delete_option: None,
reactions_to_add: vec![],
_phantom: std::marker::PhantomData,
};
}
}
impl<'a, Manager: DatabaseManager<DB>, DB: Database> Debug for Environment<'a, Manager, DB> {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
return f.debug_struct("Environment").field("embed", &self.embed).field("guild_id", &self.guild_id)
.field("target", &self.target).field("attachments", &self.attachments).field("event_info", &self.event_info)
.field("delete_option", &self.delete_option).field("reactions_to_add", &self.reactions_to_add).finish();
}
}
unsafe impl<'a, Manager: DatabaseManager<DB>, DB: Database> Send for Environment<'a, Manager, DB> {}
unsafe impl<'a, Manager: DatabaseManager<DB>, DB: Database> Sync for Environment<'a, Manager, DB> {}