From 2d5593681f13eae513a66c7146327d6170457c68 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 24 Dec 2023 01:35:21 -0500 Subject: [PATCH] Start defining the return type. --- Cargo.toml | 3 ++- Makefile | 1 + src/bin_wasm.rs | 14 ++++++++++++-- src/wasm/document.rs | 14 ++++++++++++++ src/wasm/mod.rs | 4 ++++ src/wasm/parse_result.rs | 14 ++++++++++++++ 6 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 src/wasm/document.rs create mode 100644 src/wasm/mod.rs create mode 100644 src/wasm/parse_result.rs diff --git a/Cargo.toml b/Cargo.toml index 77ac2300..610fa490 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,6 +51,7 @@ opentelemetry = { version = "0.20.0", optional = true, default-features = false, opentelemetry-otlp = { version = "0.13.0", optional = true } opentelemetry-semantic-conventions = { version = "0.12.0", optional = true } serde = { version = "1.0.193", optional = true, features = ["derive"] } +serde-wasm-bindgen = { version = "0.6.3", optional = true } tokio = { version = "1.30.0", optional = true, default-features = false, features = ["rt", "rt-multi-thread"] } tracing = { version = "0.1.37", optional = true } tracing-opentelemetry = { version = "0.20.0", optional = true } @@ -67,7 +68,7 @@ compare = ["tokio/process", "tokio/macros"] foreign_document_test = ["compare", "dep:futures", "tokio/sync", "dep:walkdir", "tokio/process"] tracing = ["dep:opentelemetry", "dep:opentelemetry-otlp", "dep:opentelemetry-semantic-conventions", "dep:tokio", "dep:tracing", "dep:tracing-opentelemetry", "dep:tracing-subscriber"] event_count = [] -wasm = ["dep:serde", "dep:wasm-bindgen"] +wasm = ["dep:serde", "dep:wasm-bindgen", "dep:serde-wasm-bindgen"] # Optimized build for any sort of release. [profile.release-lto] diff --git a/Makefile b/Makefile index 939dec87..a5e2f80d 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ release: .PHONY: wasm wasm: > cargo build --target=wasm32-unknown-unknown --profile wasm --bin wasm --features wasm +> wasm-bindgen --target web --out-dir target/wasm32-unknown-unknown/js target/wasm32-unknown-unknown/wasm/wasm.wasm .PHONY: clean clean: diff --git a/src/bin_wasm.rs b/src/bin_wasm.rs index e5a94273..26675c82 100644 --- a/src/bin_wasm.rs +++ b/src/bin_wasm.rs @@ -1,7 +1,17 @@ #![no_main] + +use organic::parser::parse_with_settings; +use organic::settings::GlobalSettings; +use wasm::ParseResult; use wasm_bindgen::prelude::wasm_bindgen; +mod wasm; + #[wasm_bindgen] -pub fn add(left: usize, right: usize) -> usize { - left + right +pub fn parse_org(org_contents: &str) -> wasm_bindgen::JsValue { + let global_settings = GlobalSettings::default(); + let rust_parsed = parse_with_settings(org_contents, &global_settings) + .map(|document| ParseResult::Success(document.into())) + .unwrap_or_else(|err| ParseResult::Error(format!("{:?}", err))); + serde_wasm_bindgen::to_value(&rust_parsed).unwrap() } diff --git a/src/wasm/document.rs b/src/wasm/document.rs new file mode 100644 index 00000000..2bcd1d6b --- /dev/null +++ b/src/wasm/document.rs @@ -0,0 +1,14 @@ +use organic::types::Document; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize)] +#[serde(tag = "ast_node")] +#[serde(rename = "org-data")] +pub(crate) struct WasmDocument {} + +impl From> for WasmDocument { + fn from(value: Document) -> Self { + todo!() + } +} diff --git a/src/wasm/mod.rs b/src/wasm/mod.rs new file mode 100644 index 00000000..4ea7533b --- /dev/null +++ b/src/wasm/mod.rs @@ -0,0 +1,4 @@ +mod document; +mod parse_result; + +pub(crate) use parse_result::ParseResult; diff --git a/src/wasm/parse_result.rs b/src/wasm/parse_result.rs new file mode 100644 index 00000000..30193ec5 --- /dev/null +++ b/src/wasm/parse_result.rs @@ -0,0 +1,14 @@ +use serde::Deserialize; +use serde::Serialize; + +use super::document::WasmDocument; + +#[derive(Serialize, Deserialize)] +#[serde(tag = "status", content = "content")] +pub(crate) enum ParseResult { + #[serde(rename = "success")] + Success(WasmDocument), + + #[serde(rename = "error")] + Error(String), +}