2.8 KiB
Supporting More Web APIs in web-sys
-
Ensure that the
.webidl
file describing the interface exists somewhere within thecrates/web-sys/webidls/enabled
directory.First, check to see whether we have the WebIDL definition file for your API:
grep -rn MyWebApi crates/web-sys/webidls
-
If your interface is defined in a
.webidl
file that is inside thecrates/web-sys/webidls/enabled
directory, skip to step (3). -
If your interface isn't defined in any file yet, find the WebIDL definition in the relevant standard and add it as a new
.webidl
file incrates/web-sys/webidls/enabled
. Make sure that it is a standard Web API! We don't want to add non-standard APIs to this crate. -
If your interface is defined in a
.webidl
file within thecrates/web-sys/webidls/available
directory, you need to move it intocrates/web-sys/webidls/enabled
:cd crates/web-sys git mv webidls/available/MyWebApi.webidl webidls/enabled/MyWebApi.webidl
Note that not all the existing WebIDL files in
available/*
have valid syntax, so if you get a syntax error on a new WebIDL file (or otherwise hit an unsupported operation), feel free to comment it out with aTODO
to fix later.
-
-
Verify that the
web-sys
crate still builds and that its tests still pass with the new.webidl
file enabled:cd crates/web-sys cargo build cargo test
-
Verify that bindings are being generated for your new API by generating the documentation and searching for the new API in it:
cd crates/web-sys cargo doc --open # search for the new API in the opened docs
-
If the new API is not showing up in the docs, rebuild the
web-sys
crate with logging enabled and look for warning messages that mention your new API. Figure out why bindings weren't generated and then add support towasm_bindgen_webidl
for whatever is needed to generate your API's bindings.You might find it helpful to view the generated rust bindings, to see if they are what you would expect. The file will be located at
target/wasm32-unknown-unknown/debug/build/web-sys-xxx/out/bindings.rs
, wherexxx
is a combinations of numbers and letters that represents your build. This file is pretty unintelligable until you runrustfmt
on it, likerustfmt target/wasm32-unknown-unknown/debug/build/web-sys-xxx/out/bindings.rs
.
-
-
Add a simple test for your new API to
crates/web-sys/tests/all/
. See theweb-sys
testing documentation for details. -
Send a pull request! 😊