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
32
33
34
35
36
37
38
39
40
use responses::user::User;
use responses::message::Message;
use super::raw::queries;
use error::UnexpectedResponse;
use try_from::TryFrom;

#[derive(Debug, Clone)]
pub struct CallbackQuery {
    pub id: String,
    pub from: User,
    pub message: Option<Message>,
    pub inline_message_id: Option<String>,
    pub chat_instance: String,
    pub data: Option<String>,
    pub game_short_name: Option<String>,
}

impl TryFrom<queries::CallbackQuery> for CallbackQuery {
    type Error = UnexpectedResponse;

    fn try_from(value: queries::CallbackQuery) -> Result<Self, UnexpectedResponse> {
        match value {
            queries::CallbackQuery { id, from, message, inline_message_id, data, game_short_name, chat_instance } => {
                let message =
                    message
                        .map(TryFrom::try_from)
                        .map_or(Ok(None), |x| x.map(Some));
                message.map(|message| CallbackQuery {
                    id,
                    from,
                    message,
                    inline_message_id,
                    chat_instance,
                    data,
                    game_short_name,
                })
            }
        }
    }
}