use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn add(a: u32, b: u32) -> u32 { lol as u32 } #[wasm_bindgen] pub enum Enum { A, B, } #[wasm_bindgen] pub struct Rust {} #[wasm_bindgen] pub fn wut( // anyref _: &JsValue, _: JsValue, // rust _: &Rust, _: Rust, _: Enum, _: bool, _: char, // numbers _: f32, _: f64, _: i8, _: u8, _: i16, _: u16, _: i32, _: u32, _: i64, _: u64, // slices _: &[u8], _: &[i8], _: &[u16], _: &[i16], _: &[u32], _: &[i32], _: &[u64], _: &[i64], _: &[f32], _: &[f64], // vectors _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, // option float _: Option, _: Option, // option integer _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, // option misc _: Option, _: Option, _: Option, _: Option, // option vectors _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, ) { } #[wasm_bindgen] pub fn goo(x: u32) { unsafe { std::mem::transmute::(x)(); } } #[wasm_bindgen] pub fn r1() -> Rust { loop {} } #[wasm_bindgen] pub fn r2() -> Vec { loop {} } #[wasm_bindgen] pub fn r3() -> JsValue { loop {} } #[wasm_bindgen] pub fn r4() -> i8 { loop {} } #[wasm_bindgen] pub fn r5() -> u8 { loop {} } #[wasm_bindgen] pub fn r6() -> i16 { loop {} } #[wasm_bindgen] pub fn r7() -> u16 { loop {} } #[wasm_bindgen] pub fn r8() -> i32 { loop {} } #[wasm_bindgen] pub fn r9() -> u32 { loop {} } #[wasm_bindgen] pub fn r10() -> i64 { loop {} } #[wasm_bindgen] pub fn r11() -> u64 { loop {} } #[wasm_bindgen] pub fn r12() -> f32 { loop {} } #[wasm_bindgen] pub fn r13() -> f64 { loop {} } #[wasm_bindgen] pub fn r14() -> bool { loop {} } #[wasm_bindgen] pub fn r15() -> char { loop {} } #[wasm_bindgen] pub fn r16() -> Enum { loop {} } #[wasm_bindgen] pub fn r17() -> Option> { loop {} } #[wasm_bindgen] pub fn r18() -> Option { loop {} } #[wasm_bindgen] pub fn r19() -> Option { loop {} } #[wasm_bindgen] pub fn r20() -> Option { loop {} } #[wasm_bindgen] pub fn r21() -> Option { loop {} } #[wasm_bindgen] pub fn r22() -> Option { loop {} } #[wasm_bindgen] extern "C" { pub fn lol( // anyref _: &JsValue, _: JsValue, // rust // _: &Rust, _: Rust, _: Enum, _: bool, _: char, // numbers _: f32, _: f64, _: i8, _: u8, _: i16, _: u16, _: i32, _: u32, _: i64, _: u64, // slices _: &[u8], _: &[i8], _: &[u16], _: &[i16], _: &[u32], _: &[i32], _: &[u64], _: &[i64], _: &[f32], _: &[f64], // vectors _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, _: Vec, // option float _: Option, _: Option, // option integer _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, _: Option, // option misc _: Option, _: Option, _: Option, _: Option, // option vectors _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, _: Option>, // option slices _: Option<&[u8]>, _: Option<&[i8]>, _: Option<&[u16]>, _: Option<&[i16]>, _: Option<&[u32]>, _: Option<&[i32]>, _: Option<&[u64]>, _: Option<&[i64]>, _: Option<&[f32]>, _: Option<&[f64]>, // closures _: &dyn Fn(), _: &mut dyn FnMut(), _: &Closure, _: &Closure, ); } macro_rules! t { ($($n:ident : $t:ty,)*) => ( $( #[wasm_bindgen] pub fn $n() -> u32 { #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = nowhere)] fn $n() -> $t; } return $n as u32; } )* ) } t! { x1: i8, x2: u8, x3: i16, x4: u16, x5: i32, x6: u32, x7: i64, x8: u64, x9: f32, x10: f64, x11: Rust, x12: Vec, x13: JsValue, x14: bool, x15: char, x16: Enum, x17: Option>, x18: Option, x19: Option, x20: Option, x21: Option, x22: Option, }