use std::collections::hash_map::DefaultHasher;
use serde::{Deserialize, Serialize};
use std::hash::{Hash, Hasher};
use crate::{Request, API};
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
pub struct User {
pub id: i64,
pub first_name: String,
pub last_name: Option<String>,
pub username: Option<String>,
pub language_code: Option<String>,
}
fn hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
impl<T: Into<String>> From<T> for User {
fn from(s: T) -> Self {
let from = s.into();
Self {
id: hash(&from.clone()) as i64,
first_name: from.clone(),
last_name: None,
username: Some(from),
language_code: None,
}
}
}
#[derive(Debug, Clone, Serialize)]
pub struct GetMeRequest {}
impl Request for GetMeRequest {}
impl API {
pub async fn get_me(&self) -> anyhow::Result<User> {
let req = GetMeRequest {};
self.client.post("getMe", &req).await
}
}