covid19 0.3.0

Wrapper for cv19api https://lbandc.github.io/2020/04/14/project-cv19api.html
Documentation
use anyhow::{anyhow, Result};
use serde::de::DeserializeOwned;

fn fetch_resource(url: &str) -> Result<String> {
    static CLIENT_USER_AGENT: &str = concat!(
        "rust-",
        env!("CARGO_PKG_NAME"),
        "/",
        env!("CARGO_PKG_VERSION"),
    );

    let client = reqwest::blocking::Client::builder()
        .user_agent(CLIENT_USER_AGENT)
        .build()?;

    let resp = client.get(url).send()?;

    if resp.status().is_success() {
        Ok(resp.text()?)
    } else {
        Err(anyhow!("{} {}", resp.status().as_u16(), resp.text()?))
    }
}

pub fn fetch<T>(url: &str) -> Result<T>
where
    T: DeserializeOwned,
{
    let r = fetch_resource(&url)?;
    Ok(serde_json::from_str::<T>(&r)?)
}