2023-04-03 15:10:58 +09:00
|
|
|
use proc_macro2::{Ident, Literal};
|
2021-11-10 20:04:36 +09:00
|
|
|
use syn::{Attribute, Expr, Type};
|
2021-09-23 02:29:09 +09:00
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiFn {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
|
|
|
pub attrs: Vec<Attribute>,
|
2022-05-22 14:43:11 +09:00
|
|
|
pub args: Vec<NapiFnArg>,
|
2021-10-25 01:00:31 +09:00
|
|
|
pub ret: Option<syn::Type>,
|
|
|
|
pub is_ret_result: bool,
|
2021-09-23 02:29:09 +09:00
|
|
|
pub is_async: bool,
|
|
|
|
pub fn_self: Option<FnSelf>,
|
|
|
|
pub kind: FnKind,
|
|
|
|
pub vis: syn::Visibility,
|
|
|
|
pub parent: Option<Ident>,
|
|
|
|
pub strict: bool,
|
2022-07-05 19:39:12 +09:00
|
|
|
pub return_if_invalid: bool,
|
2021-11-23 20:00:31 +09:00
|
|
|
pub js_mod: Option<String>,
|
2022-04-14 00:55:45 +09:00
|
|
|
pub ts_generic_types: Option<String>,
|
2021-11-26 18:26:14 +09:00
|
|
|
pub ts_args_type: Option<String>,
|
|
|
|
pub ts_return_type: Option<String>,
|
2021-12-19 18:47:02 +09:00
|
|
|
pub skip_typescript: bool,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2022-05-06 18:40:46 +09:00
|
|
|
pub parent_is_generator: bool,
|
2022-08-06 22:54:58 +09:00
|
|
|
pub writable: bool,
|
|
|
|
pub enumerable: bool,
|
|
|
|
pub configurable: bool,
|
2022-08-20 00:36:36 +09:00
|
|
|
pub catch_unwind: bool,
|
2022-11-22 01:17:19 +09:00
|
|
|
pub unsafe_: bool,
|
2023-12-11 01:36:26 +09:00
|
|
|
pub register_name: Ident,
|
2021-09-23 02:29:09 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct CallbackArg {
|
|
|
|
pub pat: Box<syn::Pat>,
|
|
|
|
pub args: Vec<syn::Type>,
|
|
|
|
pub ret: Option<syn::Type>,
|
|
|
|
}
|
|
|
|
|
2022-05-22 14:43:11 +09:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiFnArg {
|
|
|
|
pub kind: NapiFnArgKind,
|
|
|
|
pub ts_arg_type: Option<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl NapiFnArg {
|
|
|
|
/// if type was overridden with `#[napi(ts_arg_type = "...")]` use that instead
|
|
|
|
pub fn use_overridden_type_or(&self, default: impl FnOnce() -> String) -> String {
|
2022-06-10 16:20:06 +09:00
|
|
|
self.ts_arg_type.as_ref().cloned().unwrap_or_else(default)
|
2022-05-22 14:43:11 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-23 02:29:09 +09:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub enum NapiFnArgKind {
|
|
|
|
PatType(Box<syn::PatType>),
|
|
|
|
Callback(Box<CallbackArg>),
|
|
|
|
}
|
|
|
|
|
2022-08-17 18:53:44 +09:00
|
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
2021-09-23 02:29:09 +09:00
|
|
|
pub enum FnKind {
|
|
|
|
Normal,
|
|
|
|
Constructor,
|
2021-11-05 19:31:36 +09:00
|
|
|
Factory,
|
2021-09-23 02:29:09 +09:00
|
|
|
Getter,
|
|
|
|
Setter,
|
|
|
|
}
|
|
|
|
|
2022-11-22 01:17:19 +09:00
|
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
2021-09-23 02:29:09 +09:00
|
|
|
pub enum FnSelf {
|
|
|
|
Value,
|
|
|
|
Ref,
|
|
|
|
MutRef,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiStruct {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
|
|
|
pub vis: syn::Visibility,
|
|
|
|
pub fields: Vec<NapiStructField>,
|
|
|
|
pub is_tuple: bool,
|
2021-09-28 01:01:19 +09:00
|
|
|
pub kind: NapiStructKind,
|
2023-01-24 15:51:16 +09:00
|
|
|
pub object_from_js: bool,
|
|
|
|
pub object_to_js: bool,
|
2021-11-23 20:00:31 +09:00
|
|
|
pub js_mod: Option<String>,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2022-05-06 18:40:46 +09:00
|
|
|
pub implement_iterator: bool,
|
2022-08-17 14:24:40 +09:00
|
|
|
pub use_custom_finalize: bool,
|
2023-12-11 01:36:26 +09:00
|
|
|
pub register_name: Ident,
|
2024-02-24 22:49:54 +09:00
|
|
|
pub use_nullable: bool,
|
2021-09-28 01:01:19 +09:00
|
|
|
}
|
|
|
|
|
2022-08-17 18:53:44 +09:00
|
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
2021-09-28 01:01:19 +09:00
|
|
|
pub enum NapiStructKind {
|
|
|
|
None,
|
|
|
|
Constructor,
|
|
|
|
Object,
|
2021-09-23 02:29:09 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiStructField {
|
|
|
|
pub name: syn::Member,
|
|
|
|
pub js_name: String,
|
|
|
|
pub ty: syn::Type,
|
|
|
|
pub getter: bool,
|
|
|
|
pub setter: bool,
|
2022-08-06 22:54:58 +09:00
|
|
|
pub writable: bool,
|
|
|
|
pub enumerable: bool,
|
|
|
|
pub configurable: bool,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2021-12-19 18:47:02 +09:00
|
|
|
pub skip_typescript: bool,
|
2022-01-23 19:45:41 +09:00
|
|
|
pub ts_type: Option<String>,
|
2021-09-23 02:29:09 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiImpl {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
|
|
|
pub items: Vec<NapiFn>,
|
2021-11-02 21:36:34 +09:00
|
|
|
pub task_output_type: Option<Type>,
|
2022-05-06 18:40:46 +09:00
|
|
|
pub iterator_yield_type: Option<Type>,
|
|
|
|
pub iterator_next_type: Option<Type>,
|
|
|
|
pub iterator_return_type: Option<Type>,
|
2021-11-23 20:00:31 +09:00
|
|
|
pub js_mod: Option<String>,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2023-12-11 01:36:26 +09:00
|
|
|
pub register_name: Ident,
|
2021-09-23 02:29:09 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiEnum {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
|
|
|
pub variants: Vec<NapiEnumVariant>,
|
2021-11-23 20:00:31 +09:00
|
|
|
pub js_mod: Option<String>,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2021-12-19 18:47:02 +09:00
|
|
|
pub skip_typescript: bool,
|
2023-12-11 01:36:26 +09:00
|
|
|
pub register_name: Ident,
|
2021-09-23 02:29:09 +09:00
|
|
|
}
|
|
|
|
|
2023-04-03 15:10:58 +09:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub enum NapiEnumValue {
|
|
|
|
String(String),
|
|
|
|
Number(i32),
|
|
|
|
}
|
|
|
|
|
2023-04-18 11:15:29 +09:00
|
|
|
impl From<&NapiEnumValue> for Literal {
|
|
|
|
fn from(val: &NapiEnumValue) -> Self {
|
|
|
|
match val {
|
2023-04-03 15:10:58 +09:00
|
|
|
NapiEnumValue::String(string) => Literal::string(string),
|
|
|
|
NapiEnumValue::Number(number) => Literal::i32_unsuffixed(number.to_owned()),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-23 02:29:09 +09:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiEnumVariant {
|
|
|
|
pub name: Ident,
|
2023-04-03 15:10:58 +09:00
|
|
|
pub val: NapiEnumValue,
|
2021-09-23 02:29:09 +09:00
|
|
|
pub comments: Vec<String>,
|
|
|
|
}
|
2021-11-10 20:04:36 +09:00
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiConst {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
|
|
|
pub type_name: Type,
|
|
|
|
pub value: Expr,
|
2021-11-23 20:00:31 +09:00
|
|
|
pub js_mod: Option<String>,
|
2021-11-29 13:54:45 +09:00
|
|
|
pub comments: Vec<String>,
|
2021-12-19 18:47:02 +09:00
|
|
|
pub skip_typescript: bool,
|
2023-12-11 01:36:26 +09:00
|
|
|
pub register_name: Ident,
|
2021-11-23 20:00:31 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct NapiMod {
|
|
|
|
pub name: Ident,
|
|
|
|
pub js_name: String,
|
2021-11-10 20:04:36 +09:00
|
|
|
}
|