url2qr 0.1.1

Zero-dependency QR code generator optimized for URLs
Documentation
use std::process::Command;

fn main() {
    // Re-run if git state changes
    println!("cargo:rerun-if-changed=../.git/HEAD");
    println!("cargo:rerun-if-changed=../.git/refs/");

    let version = Command::new("git")
        .args(["describe", "--tags", "--always"])
        .output()
        .ok()
        .filter(|o| o.status.success())
        .and_then(|o| String::from_utf8(o.stdout).ok())
        .map(|desc| {
            let desc = desc.trim();
            // Strip optional 'v' prefix
            let desc = desc.strip_prefix('v').unwrap_or(desc);
            // "0.1.0" → "0.1.0"
            // "0.1.0-2-gabcdef" → "0.1.0+2.gabcdef"
            if let Some(idx) = desc.find('-') {
                let base = &desc[..idx];
                let rest = &desc[idx + 1..];
                // rest is "2-gabcdef"
                let parts: Vec<&str> = rest.splitn(2, '-').collect();
                if parts.len() == 2 {
                    let distance = parts[0];
                    let node = parts[1].trim_start_matches('g');
                    format!("{base}+{distance}.g{node}")
                } else {
                    desc.to_string()
                }
            } else {
                desc.to_string()
            }
        })
        .unwrap_or_else(|| env!("CARGO_PKG_VERSION").to_string());

    println!("cargo:rustc-env=GIT_VERSION={version}");
}