use super::models; use crate::api::core::models::Error; use crate::core; use std::{collections::HashMap, time::Duration}; /// pub struct Api { client: reqwest::Client, api_config: core::config::ApiConfig, } impl std::fmt::Debug for Api { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { f.debug_struct("Api of api.kgon.identity").finish() } } impl Api { /// pub fn new(api_config: core::config::ApiConfig) -> Api { Api { client: reqwest::Client::new(), api_config, } } /// pub async fn list_games( &self, data: models::ListGamesRequest, ) -> Result { let mut params = HashMap::new(); params.insert("vendorKey", data.vendor_key); let res = match self .client .post(format!("{}/games", self.api_config.k_url)) .header(reqwest::header::ACCEPT, "application/json") .header( reqwest::header::CONTENT_TYPE, "application/x-www-form-urlencoded", ) .header("k-secret", self.api_config.k_secret.as_str()) .header("k-username", self.api_config.k_username.as_str()) .form(¶ms) .send() .await { Ok(res) => res, Err(e) => { return Err(Error { code: -1, msg: Some(e.to_string()), }); } }; match res.status() { reqwest::StatusCode::OK => match res.json::().await { Ok(r) => { if r.code != 0 { return Err(Error { code: r.code, msg: r.msg, }); } let games = match r.games { Some(v) => v, None => vec![], }; Ok(models::ListGamesResponse { games }) } Err(e) => Err(Error { code: -1, msg: Some(e.to_string()), }), }, _ => Err(Error { code: -1, msg: None, }), } } /// pub async fn play(&self, data: models::PlayRequest) -> Result { let mut params = HashMap::new(); params.insert("vendorKey", data.vendor_key); params.insert("gameKey", data.game_key); params.insert("username", data.username); params.insert("nickname", data.nickname); params.insert("siteUsername", data.site_username); if let Some(group_key) = data.group_key { params.insert("groupKey", group_key); } params.insert("amount", data.amount.to_string()); if let Some(request_key) = data.request_key { params.insert("requestKey", request_key); } let res = match self .client .post(format!("{}/play", self.api_config.k_url)) .header(reqwest::header::ACCEPT, "application/json") .header( reqwest::header::CONTENT_TYPE, "application/x-www-form-urlencoded", ) .header("k-secret", self.api_config.k_secret.as_str()) .header("k-username", self.api_config.k_username.as_str()) .form(¶ms) .timeout(Duration::from_secs(10)) .send() .await { Ok(res) => res, Err(e) => { return Err(Error { code: -1, msg: Some(e.to_string()), }); } }; match res.status() { reqwest::StatusCode::OK => match res.json::().await { Ok(r) => { if r.code != 0 { return Err(Error { code: r.code, msg: r.msg, }); } let user_id = match r.user_id { Some(v) => v, None => "".to_string(), }; let url = match r.url { Some(v) => v, None => "".to_string(), }; let balance = match r.balance { Some(v) => v, None => 0, }; Ok(models::PlayResponse { user_id, url, balance, }) } Err(e) => Err(Error { code: -1, msg: Some(e.to_string()), }), }, _ => Err(Error { code: -1, msg: None, }), } } }