cmake-version-manager 0.2.2

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

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

    let major = match version_split.next() {
        Some(item) => item,
        None => return false
    };

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

    let minor = match version_split.next() {
        Some(item) => item,
        None => return false
    };

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

    let patch = match version_split.next() {
        Some(item) => item,
        None => return false
    };

    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) -> Version {
    let mut version_split = version.split('.');

    let major = match version_split.next() {
        Some(item) => match item.parse::<i32>() {
            Ok(value) => value,
            Err(error) => {
                log_error(
                    &format!("Major value could not be parsed as an int.({})", error)
                );
                0
            }
        },
        None => {
            log_error("Failed to get major version number. Setting to 0.");
            0
        }
    };

    let minor = match version_split.next() {
        Some(item) => match item.parse::<i32>() {
            Ok(value) => value,
            Err(error) => {
                log_error(
                    &format!("Minor value could not be parsed as an int.({})", error)
                );
                0
            }
        },
        None => {
            log_error("Failed to get minor version number. Setting to 0.");
            0
        }
    };

    let patch = match version_split.next() {
        Some(item) => match item.parse::<i32>() {
            Ok(value) => value,
            Err(error) => {
                log_error(
                    &format!("Patch value could not be parsed as an int.({})", error)
                );
                0
            }
        },
        None => {
            log_error("Failed to get patch version number. Setting to 0.");
            0
        }
    };

    Version {
        major,
        minor,
        patch,
    }
}

use crate::log::log_error;