1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 07:44:48 -05:00
denoland-deno/ext/ffi/Cargo.toml

29 lines
667 B
TOML
Raw Normal View History

# Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
[package]
name = "deno_ffi"
version = "0.106.0"
2022-11-22 15:07:35 -05:00
authors.workspace = true
edition.workspace = true
license.workspace = true
readme = "README.md"
2022-11-22 15:07:35 -05:00
repository.workspace = true
description = "Dynamic library ffi for deno"
[lib]
path = "lib.rs"
[dependencies]
2022-11-22 15:07:35 -05:00
deno_core.workspace = true
dlopen.workspace = true
dynasmrt = "1.2.3"
libffi = "=3.2.0"
libffi-sys = "=2.3.0"
2022-11-22 15:07:35 -05:00
serde.workspace = true
fix(ext/ffi): improve error messages in FFI module (#17786) 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
2023-02-14 23:11:59 -05:00
serde-value = "0.7"
serde_json = "1.0"
2022-11-22 15:07:35 -05:00
tokio.workspace = true
[target.'cfg(windows)'.dependencies]
2022-11-22 15:07:35 -05:00
winapi = { workspace = true, features = ["errhandlingapi", "minwindef", "ntdef", "winbase", "winnt"] }