emver 0.1.6

Semver extension with optional 4th digit given patch semantics. Designed for package distributors
Documentation
use crate::emver;
use std::cmp::Ord;
use std::cmp::Ordering;
use wasm_bindgen::prelude::*;

fn parse_version(s: &str) -> Result<emver::Version, JsValue> {
    s.parse()
        .map_err(|e| format!("{}", e))
        .map_err(JsValue::from)
}
fn parse_range(s: &str) -> Result<emver::VersionRange, JsValue> {
    s.parse()
        .map_err(|e| format!("{}", e))
        .map_err(JsValue::from)
}

#[wasm_bindgen]
pub fn major(version: &str) -> Result<usize, JsValue> {
    parse_version(version).map(|v| v.major())
}
#[wasm_bindgen]
pub fn minor(version: &str) -> Result<usize, JsValue> {
    parse_version(version).map(|v| v.minor())
}
#[wasm_bindgen]
pub fn patch(version: &str) -> Result<usize, JsValue> {
    parse_version(version).map(|v| v.patch())
}
#[wasm_bindgen]
pub fn revision(version: &str) -> Result<usize, JsValue> {
    parse_version(version).map(|v| v.revision())
}
#[wasm_bindgen]
pub fn compare(lhs: &str, rhs: &str) -> Result<isize, JsValue> {
    let s = parse_version(lhs).map_err(JsValue::from)?;
    let t = parse_version(rhs).map_err(JsValue::from)?;
    Ok(match s.cmp(&t) {
        Ordering::Less => -1,
        Ordering::Equal => 0,
        Ordering::Greater => 1,
    })
}
#[wasm_bindgen]
pub fn satisfies(version: &str, range: &str) -> Result<bool, JsValue> {
    let v = parse_version(version).map_err(JsValue::from)?;
    let r = parse_range(range).map_err(JsValue::from)?;
    Ok(v.satisfies(&r))
}