cmake-version-manager 0.2.4

CMake version helps manage installed versions of cmake.
pub fn is_version_number(version: &str) -> bool {
    let version_split = version.split('.').collect::<Vec<&str>>();

    let version_split_clone = version_split.clone();
    if version_split_clone.len() != 3 {
        return false;
    }

    let major = version_split[0];

    for letter in major.chars() {
        if !letter.is_numeric() {
            return false;
        }
    }

    let minor = version_split[1];

    for letter in minor.chars() {
        if !letter.is_numeric() {
            return false;
        }
    }

    let patch = version_split[2];

    for letter in patch.chars() {
        if !letter.is_numeric() {
            return false;
        }
    }

    true
}

#[allow(dead_code)]
pub struct Version {
    pub major: i32,
    pub minor: i32,
    pub patch: i32,
}

pub fn parse_version(version: &str) -> Result<Version, Rc<str>> {
    let version_split = version.split('.').collect::<Vec<&str>>();

    let major = version_split
        .get(0)
        .ok_or(Rc::from("Failed to get major version."))?
        .parse::<i32>()
        .map_err(map_error!("Major value could not be parsed as an int.({})"))?;

    let minor = version_split
        .get(1)
        .ok_or(Rc::from("Failed to get minor version."))?
        .parse::<i32>()
        .map_err(map_error!("Minor value could not be parsed as an int.({})"))?;

    let patch = version_split
        .get(2)
        .unwrap_or(&"0")
        .parse::<i32>()
        .map_err(map_error!(
            "Patch value could not be parsed as an int. ({})"
        ))?;

    Ok(Version {
        major,
        minor,
        patch,
    })
}

use std::rc::Rc;

use crate::macros::map_error;