Skip to content

Commit

Permalink
Implement webidl sequences.
Browse files Browse the repository at this point in the history
  • Loading branch information
derekdreery committed Jan 11, 2019
1 parent 6b13a86 commit cb8bf93
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions crates/webidl/src/idl_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,10 @@ impl<'a> IdlType<'a> {
let ty = leading_colon_path_ty(path);
anyref(ty)
};
let js_value = {
let path = vec![rust_ident("wasm_bindgen"), rust_ident("JsValue")];
anyref(leading_colon_path_ty(path))
};
match self {
IdlType::Boolean => Some(ident_ty(raw_ident("bool"))),
IdlType::Byte => Some(ident_ty(raw_ident("i8"))),
Expand Down Expand Up @@ -542,7 +546,12 @@ impl<'a> IdlType<'a> {
Some(option_ty(inner))
}
IdlType::FrozenArray(_idl_type) => None,
IdlType::Sequence(_idl_type) => None,
// webidl sequences must always be returned as javascript `Array`s. They may accept
// anything implementing the @@iterable interface.
IdlType::Sequence(_idl_type) => match pos {
TypePosition::Argument => js_value,
TypePosition::Return => js_sys("Array"),
},
IdlType::Promise(_idl_type) => js_sys("Promise"),
IdlType::Record(_idl_type_from, _idl_type_to) => None,
IdlType::Union(idl_types) => {
Expand Down Expand Up @@ -579,10 +588,7 @@ impl<'a> IdlType<'a> {
}
}

IdlType::Any => {
let path = vec![rust_ident("wasm_bindgen"), rust_ident("JsValue")];
anyref(leading_colon_path_ty(path))
}
IdlType::Any => js_value,
IdlType::Void => None,
IdlType::Callback => js_sys("Function"),
IdlType::UnknownInterface(_) => None,
Expand Down

0 comments on commit cb8bf93

Please sign in to comment.