cargo-stale 0.1.5

A fast, concurrent tool to check for outdated dependencies in your Rust Cargo.toml file
use anyhow::Result;
use log::debug;
use reqwest::Client;

use crate::types::CrateInfo;

pub fn create_client() -> Result<Client> {
    Ok(Client::builder().user_agent("cargo-stale/0.1.0").build()?)
}

pub async fn get_latest_version(client: &Client, crate_name: &str) -> Option<String> {
    debug!("Fetching latest version for crate: {crate_name}");
    let crate_name = crate_name.split_whitespace().next().unwrap_or(crate_name);
    let url = format!("https://crates.io/api/v1/crates/{crate_name}");

    let res = match client.get(&url).send().await {
        Ok(response) => {
            if response.status().is_success() {
                match response.json::<CrateInfo>().await {
                    Ok(info) => Some(info.crate_info.max_version),
                    Err(_) => None,
                }
            } else {
                None
            }
        }
        Err(_) => None,
    };
    debug!("Finished fetching latest version for crate: {crate_name}");
    res
}