geometry-Crate zu WASM baubar (Feature web, compute_joins_json); aus cad-tauri-Workspace ausgeschlossen
Erster Schritt der Rust-Kern-Migration: die Join-Geometrie wird per wasm-pack zu WASM gebaut (build:geometry) und exportiert compute_joins_json (JSON rein/raus). Damit kann das TS-Frontend kuenftig die EINE Rust-Implementierung aufrufen statt des TS-Duplikats. Crate wie render2d/render3d aus dem Workspace excludet, bleibt per Pfad-Dep fuer den nativen Host nutzbar. Verhalten unveraendert (noch nicht verdrahtet). geometry cargo test 8/8, cad-tauri cargo check ok.
This commit is contained in:
+2
-1
@@ -16,7 +16,8 @@
|
|||||||
"shell": "scripts/chromium-shell.sh",
|
"shell": "scripts/chromium-shell.sh",
|
||||||
"electron": "scripts/electron-shell.sh",
|
"electron": "scripts/electron-shell.sh",
|
||||||
"build:engine": "wasm-pack build src-tauri/render2d --release --target web --out-dir ../../src/engine/pkg --out-name render2d --no-default-features --features web",
|
"build:engine": "wasm-pack build src-tauri/render2d --release --target web --out-dir ../../src/engine/pkg --out-name render2d --no-default-features --features web",
|
||||||
"build:engine3d": "wasm-pack build src-tauri/render3d --release --target web --out-dir ../../src/engine/pkg3d --out-name render3d --no-default-features --features web"
|
"build:engine3d": "wasm-pack build src-tauri/render3d --release --target web --out-dir ../../src/engine/pkg3d --out-name render3d --no-default-features --features web",
|
||||||
|
"build:geometry": "wasm-pack build src-tauri/geometry --release --target web --out-dir ../../src/engine/pkgGeometry --out-name geometry --no-default-features --features web"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mlightcad/libredwg-web": "^0.7.7",
|
"@mlightcad/libredwg-web": "^0.7.7",
|
||||||
|
|||||||
Generated
+2
@@ -1488,8 +1488,10 @@ dependencies = [
|
|||||||
name = "geometry"
|
name = "geometry"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"console_error_panic_hook",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
members = [".", "geometry"]
|
members = ["."]
|
||||||
# render2d/render3d sind eigenstaendige Crates (jeweils eigener [workspace]), damit
|
# render2d/render3d/geometry sind eigenstaendige Crates, damit sie headless ohne
|
||||||
# sie headless ohne Tauri-Toolchain baubar/testbar bleiben. Sie liegen zwar im
|
# Tauri-Toolchain UND per wasm-pack (Feature "web") zu WASM baubar bleiben. Sie
|
||||||
# src-tauri-Baum, gehoeren aber NICHT zum cad-tauri-Workspace — hier ausschliessen,
|
# liegen zwar im src-tauri-Baum, gehoeren aber NICHT zum cad-tauri-Workspace —
|
||||||
# damit `cad-tauri` sie dennoch per Pfad als (optionale) Abhaengigkeit nutzen kann.
|
# hier ausschliessen, damit `cad-tauri` sie dennoch per Pfad als Abhaengigkeit
|
||||||
exclude = ["render2d", "render3d"]
|
# nutzen kann. geometry: neu ausgeschlossen (war Member), seit es zu WASM gebaut
|
||||||
|
# wird und das TS-Frontend die Joins direkt per WASM aufruft (statt TS-Duplikat).
|
||||||
|
exclude = ["render2d", "render3d", "geometry"]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "cad-tauri"
|
name = "cad-tauri"
|
||||||
|
|||||||
@@ -2,9 +2,28 @@
|
|||||||
name = "geometry"
|
name = "geometry"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
description = "Serde-only Geometrie-Kern (Wand-Verschneidungen/Joins) — headless und per wasm-pack (Feature \"web\") zu WASM baubar; Single Source of Truth fuer TS + nativen Host."
|
||||||
|
|
||||||
|
# cdylib: von wasm-pack (Feature "web") fuer das .wasm-Modul benoetigt. rlib:
|
||||||
|
# damit die Crate weiterhin als Pfad-Abhaengigkeit (cad-tauri) und im Test-Build
|
||||||
|
# nutzbar bleibt. Der cdylib-Artefakt-Build auf nativen Zielen ist harmlos (leere
|
||||||
|
# Export-Oberflaeche ohne Feature "web"). Muster: render2d/render3d.
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
|
[features]
|
||||||
|
# Standard: reine serde-Geometrie, headless per `cargo test` pruefbar.
|
||||||
|
default = []
|
||||||
|
# Browser-Bindings: dieselbe Geometrie hinter einer wasm-bindgen-Fassade
|
||||||
|
# (`compute_joins_json`), aus TS via wasm-pack aufgerufen. Baut nur fuer
|
||||||
|
# target wasm32-unknown-unknown sinnvoll. Muster: render3d/Cargo.toml.
|
||||||
|
web = ["dep:wasm-bindgen", "dep:serde_json", "dep:console_error_panic_hook"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
serde_json = { version = "1", optional = true }
|
||||||
|
wasm-bindgen = { version = "0.2", optional = true }
|
||||||
|
console_error_panic_hook = { version = "0.1", optional = true }
|
||||||
|
|
||||||
# Nur fuers Paritaets-Beispiel (examples/parity.rs) — JSON von stdin lesen.
|
# Nur fuers Paritaets-Beispiel (examples/parity.rs) — JSON von stdin lesen.
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|||||||
@@ -9,6 +9,20 @@
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
/// Browser-Fassade (Feature "web"): JSON rein/raus, damit das TS-Frontend die
|
||||||
|
/// EINE Rust-Join-Implementierung per wasm-pack aufrufen kann (Single Source of
|
||||||
|
/// Truth statt TS-Duplikat). `input_json` = serialisiertes `JoinInput`, Rueckgabe
|
||||||
|
/// = serialisiertes `Vec<WallCuts>`.
|
||||||
|
#[cfg(feature = "web")]
|
||||||
|
#[wasm_bindgen::prelude::wasm_bindgen]
|
||||||
|
pub fn compute_joins_json(input_json: &str) -> Result<String, wasm_bindgen::JsValue> {
|
||||||
|
console_error_panic_hook::set_once();
|
||||||
|
let input: JoinInput = serde_json::from_str(input_json)
|
||||||
|
.map_err(|e| wasm_bindgen::JsValue::from_str(&e.to_string()))?;
|
||||||
|
let out = compute_joins(input);
|
||||||
|
serde_json::to_string(&out).map_err(|e| wasm_bindgen::JsValue::from_str(&e.to_string()))
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Copy)]
|
#[derive(Serialize, Deserialize, Clone, Copy)]
|
||||||
pub struct Vec2 {
|
pub struct Vec2 {
|
||||||
pub x: f64,
|
pub x: f64,
|
||||||
|
|||||||
Reference in New Issue
Block a user