1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use serde::{de::DeserializeOwned, Serialize};

use crate::{Message, Update};

#[derive(Debug, Clone)]
pub enum UpdateEvent {
    NewMessage(i64, Message),
    EditedMessage(i64, Message),
    ChannelPost(i64, Message),
    EditedChannelPost(i64, Message),
    BadUpdate(i64, String),
}

impl From<Update> for UpdateEvent {
    fn from(update: Update) -> Self {
        if let Some(message) = update.message {
            Self::NewMessage(update.update_id, message)
        } else if let Some(message) = update.edited_message {
            Self::EditedMessage(update.update_id, message)
        } else if let Some(message) = update.channel_post {
            Self::ChannelPost(update.update_id, message)
        } else if let Some(message) = update.edited_channel_post {
            Self::EditedChannelPost(update.update_id, message)
        } else {
            Self::BadUpdate(update.update_id, format!("Unknown update: {update:?}"))
        }
    }
}

pub trait Request: Serialize + Clone + Send + Sync {}
pub trait Response: DeserializeOwned + Clone + Send + Sync {}