stdweb_internal_macros/
lib.rs1#![recursion_limit="128"]
2
3extern crate proc_macro;
4extern crate proc_macro2;
5#[macro_use]
6extern crate syn;
7#[macro_use]
8extern crate quote;
9extern crate base_x;
10extern crate serde;
11#[macro_use]
12extern crate serde_derive;
13extern crate serde_json;
14extern crate sha1;
15
16#[cfg(test)]
17mod testutils;
18
19mod utils;
20
21mod macro_js_export;
22mod macro_async_test;
23mod macro_js_raw;
24mod macro_js;
25
26mod attr_hack;
27mod js_stringify;
28mod js_shim;
29
30use utils::Target;
31
32fn emit( result: syn::parse::Result< proc_macro2::TokenStream > ) -> proc_macro::TokenStream {
33 match result {
34 Ok( stream ) => stream.into(),
35 Err( error ) => proc_macro::TokenStream::from( error.to_compile_error() )
36 }
37}
38
39#[proc_macro_attribute]
40pub fn js_export( attrs: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
41 macro_js_export::js_export( attrs, input )
42}
43
44#[proc_macro_attribute]
45pub fn async_test( attrs: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
46 macro_async_test::async_test( attrs, input )
47}
48
49#[proc_macro]
50pub fn wasm32_unknown_unknown_js_raw( input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
51 emit( macro_js_raw::js_raw( Target::NativeWebAssembly, input.into() ) )
52}
53
54#[proc_macro_attribute]
55pub fn wasm32_unknown_unknown_js_raw_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
56 emit( macro_js_raw::js_raw_attr( Target::NativeWebAssembly, input.into() ) )
57}
58
59#[proc_macro_attribute]
60pub fn wasm32_unknown_unknown_js_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
61 emit( macro_js::js_attr( Target::NativeWebAssembly, input.into(), false ) )
62}
63
64#[proc_macro_attribute]
65pub fn wasm32_unknown_unknown_js_no_return_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
66 emit( macro_js::js_attr( Target::NativeWebAssembly, input.into(), true ) )
67}
68
69#[proc_macro]
70pub fn emscripten_js_raw( input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
71 emit( macro_js_raw::js_raw( Target::Emscripten, input.into() ) )
72}
73
74#[proc_macro_attribute]
75pub fn emscripten_js_raw_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
76 emit( macro_js_raw::js_raw_attr( Target::Emscripten, input.into() ) )
77}
78
79#[proc_macro_attribute]
80pub fn emscripten_js_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
81 emit( macro_js::js_attr( Target::Emscripten, input.into(), false ) )
82}
83
84#[proc_macro_attribute]
85pub fn emscripten_js_no_return_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
86 emit( macro_js::js_attr( Target::Emscripten, input.into(), true ) )
87}
88
89#[proc_macro_attribute]
90pub fn wasm_bindgen_js_raw_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
91 emit( macro_js_raw::js_raw_attr( Target::WasmBindgen, input.into() ) )
92}
93
94#[proc_macro_attribute]
95pub fn wasm_bindgen_js_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
96 emit( macro_js::js_attr( Target::WasmBindgen, input.into(), false ) )
97}
98
99#[proc_macro_attribute]
100pub fn wasm_bindgen_js_no_return_attr( _: proc_macro::TokenStream, input: proc_macro::TokenStream ) -> proc_macro::TokenStream {
101 emit( macro_js::js_attr( Target::WasmBindgen, input.into(), true ) )
102}