#[cfg(feature = "blocking")]
use crate::client::BlockingIpApi;
use crate::client::{AsyncIpApi, IpApi};
#[cfg(feature = "blocking")]
use reqwest::blocking;
use reqwest::header::HeaderMap;
use reqwest::{Client, RequestBuilder};
use serde::de::DeserializeOwned;
use crate::model::ip_response::IpDefaultResponse;
use crate::util::urls::build_url_from_struct;
pub fn get_default_async_get_request(query: &String, client: &impl AsyncIpApi) -> RequestBuilder {
get_async_request::<IpDefaultResponse>(query, client)
}
#[cfg(feature = "blocking")]
pub fn get_default_blocking_get_request(query: &String, client: &impl BlockingIpApi) -> blocking::RequestBuilder {
get_blocking_get_request::<IpDefaultResponse>(query, client)
}
pub fn get_async_request<T>(query: &String, client: &impl AsyncIpApi) -> RequestBuilder
where
T: DeserializeOwned,
{
let url = get_url::<T>(query, client);
match client.get_api_key() {
Some(_) => build_https_get_request(&url, client.get_api_key().as_ref().unwrap(), client.get_http_client()),
None => build_http_get_request(&url, client.get_http_client()),
}
}
#[cfg(feature = "blocking")]
pub fn get_blocking_get_request<T>(query: &String, client: &impl BlockingIpApi) -> blocking::RequestBuilder
where
T: DeserializeOwned,
{
let url = get_url::<T>(query, client);
match client.get_api_key() {
Some(_) => {
build_blocking_https_get_request(&url, client.get_api_key().as_ref().unwrap(), client.get_http_client())
}
None => build_blocking_http_get_request(&url, client.get_http_client()),
}
}
fn build_https_get_request(url: &String, api_key: &str, client: &Client) -> RequestBuilder {
client.get(url).headers(build_https_header(api_key))
}
#[cfg(feature = "blocking")]
fn build_blocking_https_get_request(
url: &String,
api_key: &str,
client: &blocking::Client,
) -> blocking::RequestBuilder {
client.get(url).headers(build_https_header(api_key))
}
fn build_http_get_request(url: &String, client: &Client) -> RequestBuilder {
client.get(url).headers(build_http_header())
}
#[cfg(feature = "blocking")]
fn build_blocking_http_get_request(url: &String, client: &blocking::Client) -> blocking::RequestBuilder {
client.get(url).headers(build_http_header())
}
fn get_url<T>(query: &String, client: &impl IpApi) -> String
where
T: DeserializeOwned,
{
match client.get_api_key() {
Some(_) => build_url_from_struct::<T>(true, query),
None => build_url_from_struct::<T>(false, query),
}
}
fn build_http_header() -> HeaderMap {
let mut headers = HeaderMap::new();
headers.insert("Accept", "application/json".parse().unwrap());
headers
}
fn build_https_header(api_key: &str) -> HeaderMap {
let mut headers = build_http_header();
headers.insert("Authorization: Bearer", api_key.parse().unwrap());
headers
}