Crate interoptopus_backend_cpython_cffi[][src]

Expand description

Generates CPython CFFI bindings for Interoptopus.

Usage

In your library or a support project add this:

use my_crate::ffi_inventory;

#[test]
fn generate_python_bindings() {
    use interoptopus::Interop;
    use interoptopus_backend_cpython_cffi::{Generator, PythonWriter, Config};

    // Converts an `ffi_inventory()` into Python interop definitions.
    Generator::new(Config::default(), ffi_inventory()).write_to("module.py")
}

And we might produce something like this:

from cffi import FFI

api_definition = """
typedef struct Vec3f32
    {
    float x;
    float y;
    float z;
    } Vec2f32;

Vec3f32 my_game_function(Vec3f32* input);
"""


ffi = FFI()
ffi.cdef(api_definition)
_api = None


def init_api(dll):
    """Initializes this library, call with path to DLL."""
    global _api
    _api = ffi.dlopen(dll)


class raw:
    """Raw access to all exported functions."""

    def my_game_function(input):
    global _api
    return _api.my_game_function(input)

Structs

Configures Python code generation.

Implements PythonTypeConverter.

Start here, main converter implementing Interop.

Traits

Converts Interoptopus types to Python types.

Writes the Python file format, impl this trait to customize output.