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}