1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
extern crate console_error_panic_hook;
use std::panic;

use wasm_bindgen::prelude::*;
use gloo_utils::format::JsValueSerdeExt;

mod solver;
mod types;

#[wasm_bindgen]
pub fn wasm_check_solved(js_constraints: JsValue, js_grid: JsValue) -> JsValue {
  panic::set_hook(Box::new(console_error_panic_hook::hook));
  let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
  let grid: types::SudokuGrid = js_grid.into_serde().unwrap();
  let solver = solver::Solver::new(constraints, Some(grid));
  let result = solver.check_solved();
  JsValue::from_serde(&result).unwrap()
}

#[wasm_bindgen]
pub fn wasm_intuitive_solve(js_constraints: JsValue) -> JsValue {
  panic::set_hook(Box::new(console_error_panic_hook::hook));
  let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
  let mut solver = solver::Solver::new(constraints, None);
  let result = solver.intuitive_solve();
  JsValue::from_serde(&result).unwrap()
}

#[wasm_bindgen]
pub fn wasm_brute_solve(js_constraints: JsValue) -> JsValue {
  panic::set_hook(Box::new(console_error_panic_hook::hook));
  let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
  let mut solver = solver::Solver::new(constraints, None);
  let result = solver.brute_solve(true);
  JsValue::from_serde(&result).unwrap()
}