1 | use proc_macro2::{Ident, Span, TokenStream}; |
2 | |
3 | use crate::BindgenResult; |
4 | |
5 | mod r#const; |
6 | mod r#enum; |
7 | mod r#fn; |
8 | mod r#struct; |
9 | |
10 | pub const PROPERTY_ATTRIBUTE_DEFAULT: i32 = 0; |
11 | pub const PROPERTY_ATTRIBUTE_WRITABLE: i32 = 1 << 0; |
12 | pub const PROPERTY_ATTRIBUTE_ENUMERABLE: i32 = 1 << 1; |
13 | pub const PROPERTY_ATTRIBUTE_CONFIGURABLE: i32 = 1 << 2; |
14 | |
15 | pub trait TryToTokens { |
16 | fn try_to_tokens(&self, tokens: &mut TokenStream) -> BindgenResult<()>; |
17 | |
18 | fn try_to_token_stream(&self) -> BindgenResult<TokenStream> { |
19 | let mut tokens: TokenStream = TokenStream::default(); |
20 | self.try_to_tokens(&mut tokens)?; |
21 | |
22 | Ok(tokens) |
23 | } |
24 | } |
25 | |
26 | fn get_intermediate_ident(name: &str) -> Ident { |
27 | let new_name: String = format!("__napi__ {}" , name); |
28 | Ident::new(&new_name, Span::call_site()) |
29 | } |
30 | |
31 | fn js_mod_to_token_stream(js_mod: Option<&String>) -> TokenStream { |
32 | js_modOption |
33 | .map(|i: &String| { |
34 | let i: String = format!(" {}\0" , i); |
35 | quote! { Some(#i) } |
36 | }) |
37 | .unwrap_or_else(|| quote! { None }) |
38 | } |
39 | |