Last active
April 19, 2018 13:49
-
-
Save FreeMasen/e0ec003200d5a0b9383384541919bb4c to your computer and use it in GitHub Desktop.
wasm-bindgen Failing to gen js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "wasm" | |
version = "0.1.0" | |
authors = ["FreeMasen"] | |
[lib] | |
crate-type = ["cdylib"] | |
[dependencies] | |
wasm-bindgen = "0" | |
serde_json = "1" | |
serde = "^1.0" | |
serde_derive = "^1.0" | |
bincode = "1" | |
rmp-serde = "0.13.7" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![feature(proc_macro, wasm_custom_section, wasm_import_module)] | |
extern crate wasm_bindgen; | |
extern crate serde_json; | |
use wasm_bindgen::prelude::*; | |
mod ser_test; | |
use ser_test::get_res; | |
use serde_json::to_string; | |
#[wasm_bindgen] | |
extern { | |
type Performance; | |
static performance: Performance; | |
#[wasm_bindgen(method)] | |
fn now(this: &Performance) -> f64; | |
} | |
#[wasm_bindgen] | |
pub fn run_test() -> JsValue { | |
let data = get_res(Box::new(now), "ms"); | |
match to_string(&data) { | |
Ok(data) => JsValue::from_str(&data), | |
Err(_) => JsValue::from_str("Unable to serialize tests") | |
} | |
} | |
fn now() -> f64 { | |
performance.now() | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate serde; | |
#[macro_use] | |
extern crate serde_derive; | |
extern crate rmp_serde; | |
extern crate bincode; | |
use std::ops::Sub; | |
use std::fmt::Debug; | |
use rmp_serde::{to_vec as rmp_ser, from_slice as rmp_de}; | |
use bincode::{serialize as bin_ser, deserialize as bin_de}; | |
#[derive(Serialize, Deserialize,Debug,PartialEq, Clone)] | |
enum Message { | |
Ping, Pong, Chat(String), Nick(String), Me(String) | |
} | |
#[derive(Serialize, Deserialize, Debug, Clone)] | |
pub struct TestResult<T> { | |
rmp: Test<T>, | |
bin: Test<T>, | |
} | |
#[derive(Serialize, Deserialize, Debug, Clone)] | |
pub struct Test<T> { | |
start_timestamp: T, | |
end_timestamp: T, | |
time_unit: String, | |
largest: usize, | |
total_size: usize, | |
} | |
pub fn get_res<T:Sub<T>>(now: Box<Fn() -> T>, time_unit: &str) -> TestResult<T> | |
where <T as Sub>::Output: Debug | |
{ | |
let rmp_msgs = msgs(); | |
let rmp_start = (now)(); | |
let rmp_res = rmp_test(rmp_msgs); | |
let rmp_end = (now)(); | |
let rmp_test = Test { | |
start_timestamp: rmp_start, | |
end_timestamp: rmp_end, | |
time_unit: String::from(time_unit), | |
largest: rmp_res.0, | |
total_size: rmp_res.1, | |
}; | |
let bin_msgs = msgs(); | |
let bin_start = (now)(); | |
let bin_res = bin_test(bin_msgs); | |
let bin_end = (now)(); | |
let bin_test = Test { | |
start_timestamp: bin_start, | |
end_timestamp: bin_end, | |
time_unit: String::from(time_unit), | |
largest: bin_res.0, | |
total_size: bin_res.1 | |
}; | |
TestResult { | |
rmp: rmp_test, | |
bin: bin_test, | |
} | |
} | |
fn rmp_test(x: Vec<Message>) -> (usize, usize) { | |
let mut total_size = 0; | |
let mut max = 0; | |
for msg in x { | |
let serialized = rmp_ser(&msg).expect("Unable to serialize"); | |
let size = serialized.len(); | |
total_size += size; | |
if max < size { | |
max = size; | |
} | |
let _: Message = rmp_de(&serialized).expect("Unable to deserialize"); | |
} | |
(max, total_size) | |
} | |
fn bin_test(x: Vec<Message>) -> (usize, usize) { | |
let mut total_size = 0; | |
let mut max = 0; | |
for msg in x { | |
let serialized = bin_ser(&msg).expect("Unable to serialize"); | |
let size = serialized.len(); | |
total_size += size; | |
if max < size { | |
max = size; | |
} | |
let _: Message = bin_de(&serialized).expect("Unable to deserialize"); | |
} | |
(max, total_size) | |
} | |
fn msgs() -> Vec<Message> { | |
let mut ret = vec!(); | |
let one_of_each = vec![ | |
Message::Ping, | |
Message::Pong, | |
Message::Chat(String::from("Hello World!")), | |
Message::Nick(String::from("CoolDood2001")), | |
Message::Me(String::from("Me!")) | |
]; | |
for _ in 0..1000 { | |
ret.extend(one_of_each.clone()); | |
} | |
ret | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* tslint:disable */ | |
import * as wasm from './wasm_bg'; // imports from wasm file | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment