diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000..21e905f --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,2 @@ +((nil + (lsp-rust-features . ["wasm-bindgen"]))) diff --git a/flake.nix b/flake.nix index 1c9fc1b..65ad3f4 100644 --- a/flake.nix +++ b/flake.nix @@ -75,6 +75,7 @@ }; devShells.default = pkgs.mkShell { + RA_LOG = "rust_analyzer=info"; buildInputs = [ rust-toolchain wasm-bindgen diff --git a/src/lib/wasm.rs b/src/lib/wasm.rs index 1df77fa..1539ef2 100644 --- a/src/lib/wasm.rs +++ b/src/lib/wasm.rs @@ -1,10 +1,28 @@ use wasm_bindgen::prelude::*; +use crate::{solver, word_list::WordList}; + #[wasm_bindgen] extern "C" { fn alert(s: &str); } + #[wasm_bindgen] pub fn greet() { alert("Hello, wasm-on-web!"); } + +#[wasm_bindgen] +struct Solver(solver::Solver); + +#[wasm_bindgen] +impl Solver { + pub fn new() -> Solver { + let wl = WordList::from(["test", "yooo"].iter()); + Solver(solver::Solver::from_single_word_list(wl)) + } + + pub fn stats(&self) -> String { + self.0.tabular_format() + } +} diff --git a/src/lib/word_list.rs b/src/lib/word_list.rs index ae91224..ac2c332 100644 --- a/src/lib/word_list.rs +++ b/src/lib/word_list.rs @@ -16,6 +16,18 @@ pub struct WordList { words: HashSet, } +impl From for WordList +where + I: Iterator, + S: AsRef, +{ + fn from(value: I) -> Self { + WordList { + words: value.into_iter().map(|s| s.as_ref().to_owned()).collect(), + } + } +} + impl WordList { pub fn len(&self) -> usize { self.words.len() diff --git a/web/index.html b/web/index.html index 31f3791..e6376c2 100644 --- a/web/index.html +++ b/web/index.html @@ -5,7 +5,9 @@ WASM Demo - + + + diff --git a/web/src/main.ts b/web/src/main.ts index e84314c..de69fce 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -1,7 +1,10 @@ -import { greet } from "wordle-solver"; +import { Solver } from "wordle-solver"; const button = document.getElementById("my-button")!; +const txt = document.getElementById("out")!; button.addEventListener("click", () => { - greet(); + var s = Solver.new(); + txt.innerText = s.stats(); + s.free(); });