wsdom_ts_convert/generator/
var.rs1use proc_macro2::TokenStream;
2use quote::quote;
3
4use crate::{
5 generator::util::new_ident_safe,
6 parser::{method::MethodArg, ts_type::TsType},
7};
8
9use super::Context;
10
11impl<'a> Context<'a> {
12 pub(super) fn make_global_var_getter(&self, name: &str, ty: &TsType<'a>) -> TokenStream {
13 let function_name = new_ident_safe(name);
14 let ty = self.convert_type(self.simplify_type(ty.to_owned()));
15 quote! {
16 pub fn #function_name (browser: &__wsdom_load_ts_macro::Browser) -> #ty {
17 __wsdom_load_ts_macro::JsCast::unchecked_from_js(
18 browser.value_from_raw_code(core::format_args!(#name))
19 )
20 }
21 }
22 }
23 pub(super) fn make_custom_constructor(
24 &self,
25 class_name: &str,
26 args: &[MethodArg<'a>],
27 ret_ty: &TsType<'a>,
28 ) -> TokenStream {
29 let (arg_types, arg_names_sig, variadic) = self.make_sig_args(args);
30 let arg_names_body = arg_names_sig.clone();
31 let ret_ty = self.convert_type(self.simplify_type(ret_ty.to_owned()));
32 let name = new_ident_safe(class_name);
33 quote! {
34 pub fn #name (browser: &__wsdom_load_ts_macro::Browser, #(#arg_names_sig : #arg_types,)*) -> #ret_ty {
35 __wsdom_load_ts_macro::JsCast::unchecked_from_js(
36 browser.call_constructor(
37 #class_name,
38 [
39 #( __wsdom_load_ts_macro::UpcastWorkaround::new( #arg_names_body ).cast(), )*
40 ],
41 #variadic
42 )
43 )
44 }
45 }
46 }
47}