From 080a4fed038478980e05f87b8944896a40ed67a2 Mon Sep 17 00:00:00 2001 From: bakaq Date: Thu, 20 Feb 2025 00:48:51 -0300 Subject: [PATCH] Documentation --- src/wasm.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/wasm.rs b/src/wasm.rs index 08383318..10430677 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -1,7 +1,5 @@ //! Wasm interface -#![allow(missing_docs)] - use std::mem; use std::sync::mpsc; use std::sync::mpsc::{Receiver, Sender}; @@ -11,6 +9,7 @@ use wasm_bindgen::prelude::*; use crate::*; +/// A builder for a `Machine`. #[wasm_bindgen(js_name = MachineBuilder)] #[derive(Default)] pub struct WasmMachineBuilder { @@ -19,11 +18,13 @@ pub struct WasmMachineBuilder { #[wasm_bindgen(js_class = MachineBuilder)] impl WasmMachineBuilder { + /// Creates a new `MachineBuilder` with the default configuration. #[wasm_bindgen(constructor)] pub fn new() -> Self { Default::default() } + /// Creates a new `Machine`. pub fn build(&mut self) -> WasmMachine { WasmMachine { inner: Ok(std::mem::take(&mut self.inner).build()), @@ -31,6 +32,7 @@ impl WasmMachineBuilder { } } +/// The Scryer Prolog `Machine`. #[wasm_bindgen(js_name = Machine)] pub struct WasmMachine { inner: Result>, @@ -52,6 +54,10 @@ impl WasmMachine { Ok(()) } + /// Runs a query. + /// + /// You can only have one query at a time. If you try to do anything with this machine while + /// doing a query an error will be thrown. #[wasm_bindgen(js_name = runQuery)] pub fn run_query(&mut self, query: String) -> Result { self.ensure_machine_ownership()?; @@ -76,6 +82,7 @@ impl WasmMachine { Ok(query_state) } + /// Consults a module. #[wasm_bindgen(js_name = consultModuleString)] pub fn consult_module_string( &mut self, @@ -101,6 +108,7 @@ struct WasmQueryStateInner { query_state: QueryState<'this>, } +/// The state of a running query. #[wasm_bindgen(js_name = QueryState)] pub struct WasmQueryState { inner: Option, @@ -108,6 +116,12 @@ pub struct WasmQueryState { #[wasm_bindgen(js_class = QueryState)] impl WasmQueryState { + /// Gets the next leaf answer. + /// + /// This follows the Javascript iterator protocol, so it returns an object that + /// contains a `done` field and a `value` field. If `done` is `false`, then the query ended + /// and control of the `Machine` will be given back to the `Machine` that created this query. + /// Any call after that will result in an error. #[wasm_bindgen(js_name = next)] pub fn next_answer(&mut self) -> Result { let ret = js_sys::Object::new(); @@ -146,6 +160,10 @@ impl WasmQueryState { Ok(ret.into()) } + /// Drops the query. + /// + /// This is useful to end a query early. Like finishing a query, control will be given back + /// to the `Machine` and any call to `next` after that will result in an error. #[wasm_bindgen(js_name = drop)] pub fn drop_inner(&mut self) { let ouroboros_impl_wasm_query_state_inner::Heads { -- 2.54.0