ddoc 0.18.0

doc site generator
Documentation
pub const DDOC_VERSION: &str = env!("CARGO_PKG_VERSION");

pub fn is_current_version_older_than(version: &str) -> bool {
    compare_versions(DDOC_VERSION, version) == std::cmp::Ordering::Less
}

pub fn compare_versions(
    a: &str,
    b: &str,
) -> std::cmp::Ordering {
    let a_parts: Vec<u32> = a.split('.').map(|s| s.parse().unwrap_or(0)).collect();
    let b_parts: Vec<u32> = b.split('.').map(|s| s.parse().unwrap_or(0)).collect();

    for (a_part, b_part) in a_parts.iter().zip(b_parts.iter()) {
        match a_part.cmp(b_part) {
            std::cmp::Ordering::Equal => continue,
            non_eq => return non_eq,
        }
    }

    a_parts.len().cmp(&b_parts.len())
}

#[test]
fn test_compare_versions() {
    assert_eq!(
        compare_versions("1.0.0", "1.0.0"),
        std::cmp::Ordering::Equal
    );
    assert_eq!(
        compare_versions("1.0.1", "1.0.0"),
        std::cmp::Ordering::Greater
    );
    assert_eq!(compare_versions("1.0.0", "1.0.1"), std::cmp::Ordering::Less);
    assert_eq!(compare_versions("1.1", "2"), std::cmp::Ordering::Less);
    assert_eq!(
        compare_versions(DDOC_VERSION, DDOC_VERSION),
        std::cmp::Ordering::Equal
    );
    assert!(!is_current_version_older_than(DDOC_VERSION));
}