# C-friendly FFI Design This document is a guide for authoring Rust libraries that expose a C-friendly FFI and distributing them as ordinary CMake/pkg-config packages. It covers how to design C-friendly FFI signatures, how to pass primitive types, enums, strings and Rust-specific constructs such as `Option` and `Result` across the boundary, and how to write the accompanying C/C++ header files. ## Contents * [Rust Side](rust-side.md) - [FFI Function Signature](rust-side/func-signature.md) - [Library Architecture](rust-side/library-architecture.md) - [Allowed Data Types](rust-side/data-types.md) - [FFI Example](rust-side/example.md) - [Miscellaneous Stuff](rust-side/misc.md) * [C/C++ Side](c-cpp-side.md) - [C Header](c-cpp-side/c-header.md) - [C++ Header](c-cpp-side/cpp-header.md) - [C/C++ Headers Docstring](c-cpp-side/docstring.md) - [C/C++ Headers Example](c-cpp-side/example.md) - [Miscellaneous Stuff](c-cpp-side/misc.md) * [Pack Distribution](packer.md)