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(); #}