diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..de3a4cf --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,43 @@ +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) +} + +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 {} |