code-native 0.2.0

Helper crate for writing Code native modules in Rust
Documentation

code-native

Helper crate for writing native modules (in Rust) for the Code programming language — a .so/.wasm extension mechanism that lets you implement particle handlers, exported variables, and type declarations in Rust instead of .code source.

code-native eliminates the C-ABI boilerplate: it provides CodeValue builders/readers and the code_module! macro, which generates the required #[no_mangle] entry points (code_module_abi_version, code_module_init).

Quick start

use code_native::*;

unsafe extern "C" fn handle_add(particle: CodeValue) -> CodeValue {
    let a = read_field_number(&particle, "a");
    let b = read_field_number(&particle, "b");
    code_object(vec![
        code_field("_class", code_string("AddResult")),
        code_field("result", code_number(a + b)),
    ])
}

code_module! {
    vars: [
        "PI" => code_number(3.14159),
    ],
    types: [
        "Add" [("a", "Number"), ("b", "Number")],
    ],
    handlers: [
        "Add" => handle_add,
    ],
    emissions: [],
}

Compile as a cdylib and link it from .code source — see the native module linking docs in the main repo for the full ABI contract and the .wasm variant.

License

MIT — see LICENSE.