58 lines
1.3 KiB
Rust
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())
|
|
}
|
|
}
|