use std::future::Future;
use std::pin::Pin;
use std::sync::Arc;
use crate::context::Context;
pub type BoxFuture<T> = Pin<Box<dyn Future<Output = T> + Send + 'static>>;
pub type HandlerFn<T> = Box<dyn Fn(Arc<T>, Context) -> BoxFuture<crate::Result> + Send + Sync>;
#[derive(Debug, Clone)]
pub enum Trigger {
Command {
name: String,
target: Option<String>,
},
Message {
pattern: String,
target: Option<String>,
},
Event {
event: String,
target: Option<String>,
regex: Option<String>,
},
Mention { target: Option<String> },
Cron {
schedule: String,
tz: String,
target: Option<String>,
},
}
pub struct HandlerEntry<T> {
pub trigger: Trigger,
pub handler: HandlerFn<T>,
}