summaryrefslogtreecommitdiffstats
path: root/src/client_ext/mod.rs
blob: 2d5b23c9d583584c6b8c14d8b64ae1928184bee3 (plain) (blame)
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
41
42
43
44
use serde::Deserializer;

use serde::Deserialize;
use tdlib_rs::Client;

#[allow(unused)]
pub fn deserialize_i64_0<'de, D: Deserializer<'de>>(deserializer: D) -> std::result::Result<i64, D::Error> {
    String::deserialize(deserializer)?.parse::<i64>().map_err(serde::de::Error::custom)
}
#[allow(unused)]
pub fn deserialize_i64_1<'de, D: Deserializer<'de>>(deserializer: D) -> std::result::Result<Vec<i64>, D::Error> {
    use std::str::FromStr;
    Vec::<&'de str>::deserialize(deserializer)?
        .into_iter()
        .map(i64::from_str)
        .collect::<std::result::Result<Vec<_>, _>>()
        .map_err(serde::de::Error::custom)
}

//include!("generated.rs");
pub mod generated;

pub use generated::*;

impl std::fmt::Display for UserStatus {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            UserStatus::UserStatusEmpty => write!(f, "seen never"),
            UserStatus::UserStatusOnline(online) => write!(f, "online. expires: {}", fmt_date(online.expires)),
            UserStatus::UserStatusOffline(offline) => write!(f, "online. expires: {}", fmt_date(offline.was_online)),
            UserStatus::UserStatusRecently => write!(f, "seen recently"),
            UserStatus::UserStatusLastWeek => write!(f, "seen last week"),
            UserStatus::UserStatusLastMonth => write!(f, "seen last month"),
        }
    }
}

fn fmt_date(date: i32) -> String {
    use chrono::TimeZone;
    let dt: chrono::DateTime<chrono::Local> = chrono::Local.timestamp(date as i64, 0);
    format!("{}", dt)
}

impl ClientExt for Client {}