1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use {
    crate::{args, errors::*, misc},
    semver::Version,
    serde::*,
};

#[derive(Deserialize)]
struct GitVer {
    tag_name: String,
}

fn return_latest_release() -> String {
    println!("Checking for latest Github release... 🔍");
    match misc::return_reqwest_client()
        .get("https://api.github.com/repos/edu4rdshl/findomain/releases/latest")
        .send()
    {
        Ok(github_response) => match github_response.json::<GitVer>() {
            Ok(github_data) => github_data.tag_name,
            Err(e) => {
                check_json_errors(e, "Github Releases", false);
                String::new()
            }
        },
        Err(e) => {
            check_request_errors(e, "Github Releases", false);
            String::new()
        }
    }
}

pub fn main(args: &mut args::Args) -> Result<()> {
    let latest_version = return_latest_release();
    if Version::parse(&latest_version) > Version::parse(&args.version) {
        if !args.quiet_flag {
            println!(
                "Findomain local release: {}, Findomain latest stable release: {}",
                args.version, latest_version
            );
            println!("Update is available, please see https://git.io/Jv3v7 for more information.");
        }
    } else if !args.quiet_flag {
        println!("Findomain is up to date.");
    }
    Ok(())
}