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
use regex::Regex;

pub fn check_version(req: &str, version: &str) -> bool {
    if req.starts_with("^") {
        return to_int_version(&req[1..req.len()]) <= to_int_version(version);
    }
    to_int_version(&req) == to_int_version(version)
}

pub fn get_toolkit_version() -> String {
    format!(
        "{}.{}.{}",
        env!("CARGO_PKG_VERSION_MAJOR"),
        env!("CARGO_PKG_VERSION_MINOR"),
        env!("CARGO_PKG_VERSION_PATCH"),
    )
}

pub fn to_int_version(version: &str) -> u32 {
    let regex = Regex::new(r"(?P<major>[0-9]+).(?P<minor>[0-9]+)(.(?P<patch>[0-9]+))?").unwrap();
    let captures = regex
        .captures(version)
        .expect(&format!("Invalid version string '{}'!", version));

    let major = captures["major"].parse::<u32>().unwrap();
    let minor = captures["minor"].parse::<u32>().unwrap();
    let patch = if let Some(res) = captures.name("patch") {
        res.as_str().parse::<u32>().unwrap()
    } else {
        0
    };

    (major << 24) + (minor << 16) + patch
}