teleser/handler/
mod.rs

1use async_trait::async_trait;
2use grammers_client::types::{CallbackQuery, InlineQuery, Message, MessageDeletion};
3use grammers_client::Update;
4use grammers_tl_types as tl;
5
6macro_rules! process_trait {
7    ($name:ident, $event:path) => {
8        #[async_trait]
9        pub trait $name: Sync + Send {
10            async fn handle(
11                &self,
12                client: &mut grammers_client::Client,
13                event: &$event,
14            ) -> anyhow::Result<bool>;
15        }
16    };
17}
18
19process_trait!(UpdateProcess, Update);
20process_trait!(NewMessageProcess, Message);
21process_trait!(MessageEditedProcess, Message);
22process_trait!(MessageDeletedProcess, MessageDeletion);
23process_trait!(CallbackQueryProcess, CallbackQuery);
24process_trait!(InlineQueryProcess, InlineQuery);
25process_trait!(RawProcess, tl::enums::Update);
26
27pub enum Process {
28    UpdateProcess(Box<dyn UpdateProcess>),
29    NewMessageProcess(Box<dyn NewMessageProcess>),
30    MessageEditedProcess(Box<dyn MessageEditedProcess>),
31    MessageDeletedProcess(Box<dyn MessageDeletedProcess>),
32    CallbackQueryProcess(Box<dyn CallbackQueryProcess>),
33    InlineQueryProcess(Box<dyn InlineQueryProcess>),
34    RawProcess(Box<dyn RawProcess>),
35}
36
37pub struct Module {
38    pub id: String,
39    pub name: String,
40    pub handlers: Vec<Handler>,
41}
42
43pub struct Handler {
44    pub id: String,
45    pub process: Process,
46}