diff --git a/crates/webidl/src/idl_type.rs b/crates/webidl/src/idl_type.rs index 7d4cd81e..be96d596 100644 --- a/crates/webidl/src/idl_type.rs +++ b/crates/webidl/src/idl_type.rs @@ -481,7 +481,15 @@ impl<'a> IdlType<'a> { IdlType::Nullable(idl_type) => Some(option_ty(idl_type.to_syn_type(pos)?)), IdlType::FrozenArray(_idl_type) => None, IdlType::Sequence(_idl_type) => None, - IdlType::Promise(_idl_type) => None, + IdlType::Promise(_idl_type) => { + let path = vec![rust_ident("js_sys"), rust_ident("Promise")]; + let ty = leading_colon_path_ty(path); + if pos == TypePosition::Argument { + Some(shared_ref(ty)) + } else { + Some(ty) + } + } IdlType::Record(_idl_type_from, _idl_type_to) => None, IdlType::Union(_idl_types) => None, diff --git a/crates/webidl/src/lib.rs b/crates/webidl/src/lib.rs index bb8bab71..ed6ab3af 100644 --- a/crates/webidl/src/lib.rs +++ b/crates/webidl/src/lib.rs @@ -117,7 +117,7 @@ fn compile_ast(mut ast: backend::ast::Program) -> String { vec![ "str", "char", "bool", "JsValue", "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "usize", "isize", "f32", "f64", "Result", "String", "Vec", "Option", - "ArrayBuffer", "Object", + "ArrayBuffer", "Object", "Promise", ].into_iter() .map(|id| proc_macro2::Ident::new(id, proc_macro2::Span::call_site())), );