konjure_wasm/
interchange.rs1use konjure_sdk::{
3 EntityId, Mesh, SceneDocument,
4 interchange::{MAX_BUNDLE_BYTES, SceneBundle},
5};
6use serde::Deserialize;
7use std::collections::BTreeMap;
8use wasm_bindgen::prelude::*;
9
10#[wasm_bindgen]
12pub fn scene_bundle_to_sources(input: &str) -> Result<String, JsValue> {
13 let bundle = konjure_lang::interchange::parse_bundle(input).map_err(super::json_error)?;
14 let sources = konjure_lang::interchange::to_sources(&bundle).map_err(super::json_error)?;
15 super::encode(&sources)
16}
17
18#[wasm_bindgen]
20pub fn scene_bundle_from_render(input: &str, title: &str) -> Result<String, JsValue> {
21 if input.len() > MAX_BUNDLE_BYTES {
22 return Err(super::json_error("render output exceeds 8 MiB"));
23 }
24 #[derive(Deserialize)]
25 struct Render {
26 document: SceneDocument,
27 meshes: BTreeMap<EntityId, Mesh>,
28 }
29 let mut render: Render = serde_json::from_str(input).map_err(super::json_error)?;
30 render.document.title = title.into();
31 render.document.conversation.clear();
32 let bundle = SceneBundle::new(render.document, render.meshes).map_err(super::json_error)?;
33 let encoded = super::encode(&bundle)?;
34 if encoded.len() > MAX_BUNDLE_BYTES {
35 return Err(super::json_error("scene bundle exceeds 8 MiB"));
36 }
37 Ok(encoded)
38}