10 releases

0.0.12 Jul 30, 2024
0.0.11 Jul 30, 2024
0.0.9 Jun 19, 2024
0.0.7 May 13, 2024
0.0.4 Jan 12, 2024

#90 in FFI

Download history 27/week @ 2024-07-05 41/week @ 2024-07-12 558/week @ 2024-07-26 91/week @ 2024-08-02 79/week @ 2024-08-09 1/week @ 2024-08-16 81/week @ 2024-08-30 20/week @ 2024-09-06 40/week @ 2024-09-13 257/week @ 2024-09-20 23/week @ 2024-09-27 5/week @ 2024-10-04 24/week @ 2024-10-11 16/week @ 2024-10-18

82 downloads per month

BSD-2-Clause

30KB
803 lines

ffi_types

This repository provides C-ABI compatible basic Rust types including box, slice, str and boxed slice/str. By carefully following instructions, the types are bindgen/cbindgen compatible and owned values are safe under C++.

The project consists of 2 parts. A rust crate of #[repr(C)] wrappers of rust types and a header file for C++ (or a few more later).

The conversions are intended to be zero-cost.

TODO: link to docs and examples

CBindgen

Use ffi_types::cbindgen::with_cxx_ffi_types() to add proper configuration to cbindgen::Builder.

Bindgen

Block the provided header to blocklist_file. Replace all root::ffi_types:: to ffi_types:: in generated file.

Not the best choice for FFI

If you start a new project, please check cxx fits in your case.

Since the goal of ffi_types is exposing Rust type to C++ side, you need access to C++ code base.

ffi_types only provides types. Nothing is automatic. You still need to manage bindgen/cbindgen.

MSVC is very picky. ffi_types limits convenience initializers for C-prefixed types for MSVC. It will be less convenient and more unsafe.

Dependencies

~0–8.5MB
~88K SLoC