mirror of
https://github.com/denoland/deno.git
synced 2024-11-01 09:24:20 -04:00
4104a674c7
Fixes denoland#16922. The error messages in the `ffi` module are somewhat cryptic when passing functions that have invalid `parameters` or `result` type strings. While the generated serializer for the `ForeignFunction` struct correctly outputs a correct and verbose message, the user sees a far less helpful `data did not match any variant` message instead. The underlying cause appears to be the fallback message in the auto-derived deserializer for untagged enums [1] generated as a result of `ForeignSymbol` being marked as `#[serde(untagged)]` [2]. Passing an unexpected value for `NativeType` causes it to error out while attempting to deserialize both enum variants -- once because it's not a match for the `ForeignStatic` variant, and once because the `ForeignFunction` deserializer rejects the invalid type for the parameters/return type. This is currently open as [serde #773](https://github.com/serde-rs/serde/issues/773), and not a trivial exercise to fix generically. [1] https://github.com/serde-rs/serde/blob/v0.9.7/serde_derive/src/de.rs#L730 [2] https://github.com/denoland/deno/blob/main/ext/ffi/dlfcn.rs#L102 [3] https://github.com/serde-rs/serde/issues/773 Note that the auto-generated deserializer for untagged enums uses a private API to buffer deserializer content that we don't have access to. Instead, we can make use of the `serde_value` crate to buffer the values. This can likely be removed once the official buffering API lands (see [4] and [5]). In addition, this crate pulls in `serde_json` as a cheap way to test that the deserializer works properly. [4] https://github.com/serde-rs/serde/issues/741 [5] https://github.com/serde-rs/serde/pull/2348
27 lines
643 B
TOML
27 lines
643 B
TOML
# Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
|
|
|
[package]
|
|
name = "deno_ffi"
|
|
version = "0.76.0"
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
readme = "README.md"
|
|
repository.workspace = true
|
|
description = "Dynamic library ffi for deno"
|
|
|
|
[lib]
|
|
path = "lib.rs"
|
|
|
|
[dependencies]
|
|
deno_core.workspace = true
|
|
dlopen.workspace = true
|
|
dynasmrt = "1.2.3"
|
|
libffi = "3.1.0"
|
|
serde.workspace = true
|
|
serde-value = "0.7"
|
|
serde_json = "1.0"
|
|
tokio.workspace = true
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
winapi = { workspace = true, features = ["errhandlingapi", "minwindef", "ntdef", "winbase", "winnt"] }
|