exact-poly 0.3.0

Integer polygon geometry library — exact arithmetic, no float errors
Documentation
use wasm_bindgen::prelude::*;

use super::helpers::*;

#[wasm_bindgen]
pub fn twice_area(ring_flat: &[i64]) -> Result<String, JsValue> {
    let ring = parse_flat_ring(ring_flat)?;
    Ok(crate::area::twice_area_fp2(&ring).to_string())
}

#[wasm_bindgen(skip_typescript)]
pub fn area_display_from_twice_area(
    twice_area: &str,
    config: Option<JsValue>,
) -> Result<u64, JsValue> {
    let config = parse_config(config)?;
    Ok(crate::area::area_display(
        parse_u128_str(twice_area, "twice_area")?,
        config.area_divisor,
    ))
}

#[wasm_bindgen(skip_typescript)]
pub fn areas_conserved_values(original: &str, part_areas: JsValue) -> Result<bool, JsValue> {
    let original = parse_u128_str(original, "original")?;
    let part_area_strings: Vec<String> =
        serde_wasm_bindgen::from_value(part_areas).map_err(|err| invalid_input(err.to_string()))?;
    let parsed = part_area_strings
        .iter()
        .map(|value| parse_u128_str(value, "part area"))
        .collect::<Result<Vec<_>, _>>()?;
    Ok(crate::area::areas_conserved(original, &parsed))
}

#[wasm_bindgen]
pub fn signed_area_2x(ring_flat: &[i64]) -> Result<String, JsValue> {
    let ring = parse_flat_ring(ring_flat)?;
    Ok(crate::ring::signed_area_2x(&ring).to_string())
}