two.rs

1.4 kB · rust · 59 lines

1use crate::{code_of, Fault, Grid};2use mrlyrs::core::json;3use mrlyrs::math::bang::Code;4use mrlyrs::math::two::{self, Cell2d};5use wasm_bindgen::prelude::*;67fn cell(8    code: &str,9    number: usize,10    level: usize,11    rotation: usize,12    base: usize,13) -> Result<Cell2d, Fault> {14    Ok(two::create(15        Code::from(code_of(code)?),16        number,17        level,18        rotation,19        base,20    )?)21}2223/// Builds the flat design the code names as a byte grid, one byte per site.24#[wasm_bindgen]25pub fn two_grid(26    code: &str,27    number: usize,28    level: usize,29    rotation: usize,30    base: usize,31) -> Result<Grid, Fault> {32    let cell = cell(code, number, level, rotation, base)?;33    Ok(Grid {34        width: cell.width() as u32,35        height: cell.height() as u32,36        types: cell.types().bytes()?.to_vec(),37    })38}3940/// Tallies the flat design: fills, voids, perimeter, vertices, edges and Euler number, as JSON.41#[wasm_bindgen]42pub fn two_census(43    code: &str,44    number: usize,45    level: usize,46    rotation: usize,47    base: usize,48) -> Result<String, Fault> {49    let tally = two::census(&cell(code, number, level, rotation, base)?)?;50    Ok(json!({51        "fills": tally.fills,52        "voids": tally.voids,53        "perimeter": tally.perimeter.to_string(),54        "vertices": tally.vertices,55        "edges": tally.edges,56        "euler": tally.euler,57    })58    .to_string())59}