| 1 | #[macro_use ] |
| 2 | extern crate quote; |
| 3 | |
| 4 | use std::collections::HashMap; |
| 5 | |
| 6 | use once_cell::sync::Lazy; |
| 7 | use proc_macro2::TokenStream; |
| 8 | |
| 9 | #[macro_use ] |
| 10 | pub mod error; |
| 11 | pub mod ast; |
| 12 | pub mod codegen; |
| 13 | #[cfg (feature = "type-def" )] |
| 14 | pub mod typegen; |
| 15 | |
| 16 | pub use ast::*; |
| 17 | pub use codegen::*; |
| 18 | pub use error::{BindgenResult, Diagnostic}; |
| 19 | #[cfg (feature = "type-def" )] |
| 20 | pub use semver; |
| 21 | #[cfg (feature = "type-def" )] |
| 22 | pub use typegen::*; |
| 23 | |
| 24 | #[derive (Debug)] |
| 25 | pub struct Napi { |
| 26 | pub item: NapiItem, |
| 27 | } |
| 28 | |
| 29 | macro_rules! napi_ast_impl { |
| 30 | ( $( ($v:ident, $ast:ident), )* ) => { |
| 31 | #[derive(Debug)] |
| 32 | #[allow(clippy::large_enum_variant)] |
| 33 | pub enum NapiItem { |
| 34 | $($v($ast)),* |
| 35 | } |
| 36 | |
| 37 | impl TryToTokens for Napi { |
| 38 | fn try_to_tokens(&self, tokens: &mut TokenStream) -> BindgenResult<()> { |
| 39 | match self.item { |
| 40 | $( NapiItem::$v(ref ast) => ast.try_to_tokens(tokens) ),* |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | #[cfg(feature = "type-def" )] |
| 46 | impl ToTypeDef for Napi { |
| 47 | fn to_type_def(&self) -> Option<TypeDef> { |
| 48 | match self.item { |
| 49 | $( NapiItem::$v(ref ast) => ast.to_type_def() ),* |
| 50 | } |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | impl Napi { |
| 55 | pub fn register_name(&self) -> String { |
| 56 | match self.item { |
| 57 | $( NapiItem::$v(ref ast) => ast.register_name.to_string() ),* |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | }; |
| 62 | } |
| 63 | |
| 64 | napi_ast_impl! { |
| 65 | (Fn, NapiFn), |
| 66 | (Struct, NapiStruct), |
| 67 | (Impl, NapiImpl), |
| 68 | (Enum, NapiEnum), |
| 69 | (Const, NapiConst), |
| 70 | } |
| 71 | |
| 72 | pub(crate) static PRIMITIVE_TYPES: &[(&str, (&str, bool, bool))] = &[ |
| 73 | ("JsUndefined" , ("undefined" , false, false)), |
| 74 | ("()" , ("undefined" , false, false)), |
| 75 | ("Undefined" , ("undefined" , false, false)), |
| 76 | ("JsNumber" , ("number" , false, false)), |
| 77 | ("i8" , ("number" , false, false)), |
| 78 | ("i16" , ("number" , false, false)), |
| 79 | ("i32" , ("number" , false, false)), |
| 80 | ("i64" , ("number" , false, false)), |
| 81 | ("f32" , ("number" , false, false)), |
| 82 | ("f64" , ("number" , false, false)), |
| 83 | ("u8" , ("number" , false, false)), |
| 84 | ("u16" , ("number" , false, false)), |
| 85 | ("u32" , ("number" , false, false)), |
| 86 | // serde `Number` |
| 87 | ("Number" , ("number" , false, false)), |
| 88 | ("u64" , ("bigint" , false, false)), |
| 89 | ("i64n" , ("bigint" , false, false)), |
| 90 | ("u128" , ("bigint" , false, false)), |
| 91 | ("i128" , ("bigint" , false, false)), |
| 92 | ("usize" , ("bigint" , false, false)), |
| 93 | ("isize" , ("bigint" , false, false)), |
| 94 | ("JsBigInt" , ("bigint" , false, false)), |
| 95 | ("BigInt" , ("bigint" , false, false)), |
| 96 | ("JsBoolean" , ("boolean" , false, false)), |
| 97 | ("bool" , ("boolean" , false, false)), |
| 98 | ("JsString" , ("string" , false, false)), |
| 99 | ("String" , ("string" , false, false)), |
| 100 | ("str" , ("string" , false, false)), |
| 101 | ("Latin1String" , ("string" , false, false)), |
| 102 | ("Utf16String" , ("string" , false, false)), |
| 103 | ("char" , ("string" , false, false)), |
| 104 | ("Null" , ("null" , false, false)), |
| 105 | ("JsNull" , ("null" , false, false)), |
| 106 | ("null" , ("null" , false, false)), |
| 107 | ("Symbol" , ("symbol" , false, false)), |
| 108 | ("JsSymbol" , ("symbol" , false, false)), |
| 109 | ("JsFunction" , ("(...args: any[]) => any" , true, false)), |
| 110 | ]; |
| 111 | |
| 112 | pub(crate) static TYPEDARRAY_SLICE_TYPES: Lazy<HashMap<&str, &str>> = Lazy::new(|| { |
| 113 | HashMap::from([ |
| 114 | ("u8" , "Uint8Array" ), |
| 115 | ("i8" , "Int8Array" ), |
| 116 | ("u16" , "Uint16Array" ), |
| 117 | ("i16" , "Int16Array" ), |
| 118 | ("u32" , "Uint32Array" ), |
| 119 | ("i32" , "Int32Array" ), |
| 120 | ("f32" , "Float32Array" ), |
| 121 | ("f64" , "Float64Array" ), |
| 122 | ("u64" , "BigUint64Array" ), |
| 123 | ("i64" , "BigInt64Array" ), |
| 124 | ]) |
| 125 | }); |
| 126 | |