Common pitfalls
the trait bound ToV8<'_>
/FromV8<'_>
is not satisfied
Function argument and return types for js(func)
,
js(prop)
, etc., must implement specific traits for data to be
able to pass to/from JavaScript.
By default, arguments must implement ToV8
, and return types must implement
FromV8
.
If you would like to serialize data using serde
instead, you can opt into this
behavior by rewriting a type T
as serde<T>
:
#[js(interface)]
impl Foo {
#[js(func)]
- fn bar(&self, baz: Baz) {}
+ fn bar(&self, baz: serde<Baz>) {}
}
See Specifying types for additional information on data conversion.
use of undeclared crate or module deno_core
The #[js]
macro generates code that references the deno_core
crate, but it does
not generate a use deno_core
statement. Instead, it assume that deno_core
is in
scope where the macro is used.
If your crate directly depends on deno_core
, then the macro will work without extra
steps. If your crate does not directly depend on deno_core
, for example, if you are
using deno_runtime
instead, then you can manually introduce deno_core
into scope:
+ use deno_runtime::deno_core;
#[js(global_this)]
struct Global;