gmftools/gmfwasm/src/lib.rs

58 lines
1.3 KiB
Rust

use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn foo(name: &str) -> String {
return name.to_uppercase()
}
#[wasm_bindgen]
pub struct GMF {
inner: gmflib::types::GMF,
}
//#[derive(Serialize)]
#[wasm_bindgen(getter_with_clone)]
pub struct ParseError {
inner: gmflib::GMIReadError,
}
#[wasm_bindgen]
impl ParseError {
pub fn msg(&self) -> String {
return self.inner.msg.clone()
}
pub fn stack(&self) -> JsValue {
let v: Vec<String> = self.inner.stack.iter().map(|f| {
format!("{} at 0x{:x}", f.name, f.loc)
}).collect();
JsValue::from_serde(&v).unwrap()
}
}
#[wasm_bindgen]
impl GMF {
pub fn parse_binary(array: js_sys::Uint8Array) -> Result<GMF,ParseError> {
let data = array.to_vec();
gmflib::GMF::read_gmi(data.as_slice()).map_err(|inner| {
ParseError {
inner
}
}).map(|inner| {
GMF {
inner,
}
})
}
pub fn to_json(&self) -> JsValue {
JsValue::from_serde(&self.inner).unwrap()
}
pub fn to_gma(&self) -> Result<String,String> {
let mut buf: Vec<u8> = vec![];
self.inner.write_gma(&mut buf).map_err(|e| {
e.msg.to_string()
}).map(|_| std::str::from_utf8(&buf).unwrap().to_string())
}
}