build-clean 1.6.1

Clean all build caches on your disk!
use std::env;

use anyhow::{anyhow, Result};
use tokio::sync::oneshot::Sender;

pub fn should_update() -> Result<bool> {
    if env::var("BUILD_CLEAN_NO_UPDATES").is_ok() {
        return Ok(false);
    }
    Ok(true)
}

pub async fn check_update(tx: Sender<Option<String>>) -> Result<()> {
    let resp = reqwest::Client::builder()
        .build()?
        .get(concat!(
            "https://crates.io/api/v1/crates/",
            env!("CARGO_PKG_NAME")
        ))
        .header(
            "User-Agent",
            format!("{}/{}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")),
        )
        .send()
        .await?
        .error_for_status()?
        .json::<serde_json::Value>()
        .await?;
    let version = resp
        .as_object()
        .ok_or(anyhow!("crates.io respond a json but not obj"))?["crate"]
        .as_object()
        .ok_or(anyhow!("$.crate is not a json obj"))?["newest_version"]
        .as_str()
        .ok_or(anyhow!("$.crate.newest_version is not a json str"))?
        .to_string();
    if version != env!("CARGO_PKG_VERSION") {
        let _ = tx.send(Some(version));
    } else {
        let _ = tx.send(None);
    }
    Ok(())
}