#ffi #bindings


A crate to help expose Rust functions over the FFI

12 releases

✓ Uses Rust 2018 edition

0.3.4 May 1, 2019
0.3.3 Apr 10, 2019
0.3.0 Mar 19, 2019
0.2.0 Feb 15, 2019
0.1.2 Dec 12, 2018

#22 in FFI

Download history 7/week @ 2019-02-16 3/week @ 2019-02-23 22/week @ 2019-03-02 9/week @ 2019-03-09 26/week @ 2019-03-16 30/week @ 2019-03-23 19/week @ 2019-03-30 43/week @ 2019-04-06 9/week @ 2019-04-13 53/week @ 2019-04-20 56/week @ 2019-04-27 380/week @ 2019-05-04 517/week @ 2019-05-11 405/week @ 2019-05-18 519/week @ 2019-05-25

838 downloads per month

MPL-2.0 license

1.5K SLoC

FFI Support


This crate implements a support library to simplify implementing the patterns that the mozilla/application-services repository uses for it's "Rust Component" FFI libraries, which are used to share Rust code

In particular, it can assist with the following areas:

  1. Avoiding throwing panics over the FFI (which is undefined behavior)
  2. Translating rust errors (and panics) into errors that the caller on the other side of the FFI is able to handle.
  3. Converting strings to/from rust str.
  4. Passing non-string data (in a few ways, including exposing an opaque pointeer, marshalling data to JSON strings with serde, as well as arbitrary custom handling) back and forth between Rust and whatever the caller on the other side of the FFI is.

Additionally, it's documentation describes a number of the problems we've hit doing this to expose libraries to consumers on mobile platforms.


Add the following to your Cargo.toml

ffi-support = "0.1.1"

For further examples, the examples in the docs is the best starting point, followed by the usage code in the mozilla/application-services repo (for example here or here).


MPL-2.0, as described at https://www.mozilla.org/en-US/MPL/2.0


~22K SLoC