extends = Class
The extends
attribute can be used to say that an imported type extends (in the
JS class hierarchy sense) another type. This will generate AsRef
, AsMut
, and
From
impls for converting a type into another given that we statically know
the inheritance hierarchy:
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { type Foo; #[wasm_bindgen(extends = Foo)] type Bar; } let x: &Bar = ...; let y: &Foo = x.as_ref(); // zero cost cast #}
The trait implementations generated for the above block are:
# #![allow(unused_variables)] #fn main() { impl From<Bar> for Foo { ... } impl AsRef<Foo> for Bar { ... } impl AsMut<Foo> for Bar { ... } #}
The extends = ...
attribute can be specified multiple times for longer
inheritance chains, and AsRef
and such impls will be generated for each of
the types.
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { type Foo; #[wasm_bindgen(extends = Foo)] type Bar; #[wasm_bindgen(extends = Foo, extends = Bar)] type Baz; } let x: &Baz = ...; let y1: &Bar = x.as_ref(); let y2: &Foo = y1.as_ref(); #}