Separate types and functions

This commit is contained in:
Temirkhan Myrzamadi 2019-09-02 02:00:59 +06:00
parent db7755d398
commit 5020cafcd2
3 changed files with 50 additions and 44 deletions

35
src/core/functions.rs Normal file
View file

@ -0,0 +1,35 @@
use crate::core::types::User;
use crate::core::{Error, Response, TELEGRAM_URL_START, REQWEST_CLIENT};
use serde_json::Value;
use futures::compat::Future01CompatExt;
pub async fn get_me(bot_token: &str) -> Response<User> {
let mut response = REQWEST_CLIENT
.get(&format!(
"{}{bot_token}/getMe",
TELEGRAM_URL_START,
bot_token = bot_token
))
.send()
.compat()
.await
.map_err(Error::Send)?;
let response_json = response
.json::<Value>()
.compat()
.await
.map_err(Error::InvalidJson)?;
if response_json["ok"] == "false" {
return Err(Error::Api {
status_code: response.status(),
description: match response_json.get("description") {
None => None,
Some(description) => Some(description.to_string()),
},
});
}
Ok(serde_json::from_value(response_json["result"].clone()).unwrap())
}

View file

@ -1,8 +1,9 @@
use futures::compat::Future01CompatExt;
use reqwest::r#async::Client; use reqwest::r#async::Client;
use reqwest::StatusCode; use reqwest::StatusCode;
use serde::Deserialize;
use serde_json::Value; mod functions;
mod types;
lazy_static! { lazy_static! {
static ref REQWEST_CLIENT: Client = Client::new(); static ref REQWEST_CLIENT: Client = Client::new();
@ -21,44 +22,3 @@ pub enum Error {
} }
pub type Response<T> = Result<T, Error>; pub type Response<T> = Result<T, Error>;
#[derive(Debug, Deserialize)]
pub struct User {
id: i64,
is_bot: bool,
first_name: String,
last_name: Option<String>,
username: Option<String>,
language_code: Option<String>,
}
pub async fn get_me(bot_token: &str) -> Response<User> {
let mut response = REQWEST_CLIENT
.get(&format!(
"{}{bot_token}/getMe",
TELEGRAM_URL_START,
bot_token = bot_token
))
.send()
.compat()
.await
.map_err(Error::Send)?;
let response_json = response
.json::<Value>()
.compat()
.await
.map_err(Error::InvalidJson)?;
if response_json["ok"] == "false" {
return Err(Error::Api {
status_code: response.status(),
description: match response_json.get("description") {
None => None,
Some(description) => Some(description.to_string()),
},
});
}
Ok(serde_json::from_value(response_json["result"].clone()).unwrap())
}

11
src/core/types.rs Normal file
View file

@ -0,0 +1,11 @@
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct User {
id: i64,
is_bot: bool,
first_name: String,
last_name: Option<String>,
username: Option<String>,
language_code: Option<String>,
}