1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use reqwest;
use reqwest::Url;
use serde::de::DeserializeOwned;

type Error = Box<dyn std::error::Error>;

pub async fn fetch<T>(url: &str, params: &[(impl AsRef<str>, impl AsRef<str>)]) -> Result<T, Error>
where
    T: DeserializeOwned,
{
    let url = Url::parse_with_params(url, params)?;

    let res = reqwest::get(url).await?;

    let output = res.json().await?;

    Ok(output)
}