raml 0.1.0

Direct OCaml FFI bindings and runtime functions in Rust, without any C
Documentation
  • Coverage
  • 38.1%
    24 out of 63 items documented1 out of 4 items with examples
  • Size
  • Source code size: 20.2 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.07 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 9s Average build duration of successful builds.
  • all releases: 9s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • m4b/raml
    78 5 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • m4b

goats are actually the best animal ever invented

Raml - Intelligent OCaml FFI in Rust

Direct OCaml bindings without ever leaving Rust - no C stubs!

(you still have to know how the C ffi bindings work; if you do, the macros are almost identical to the C ones in their naming and purpose)

Please see the example in examples for the Rust code in rust for the Rust code that OCaml code will call and the ocaml directory for the OCaml code that calls the Rust code.

Also, please bear with me as I'm trying to add more documentation and examples, but I am very busy; if you see something, don't hesitate to add a PR or issue, thanks :)

A basic example demonstrates their usage:

caml!(ml_beef, |parameter|, <local>, {
    let i = int_val!(parameter);
    let res = 0xbeef * i;
    println!("about to return  0x{:x} to OCaml runtime", res);
    local = val_int!(res);
} -> local);

The macro takes care of automatically declaring CAMLparam et. al, as well as CAMLlocal and CAMLreturn.

If you need more fine grained control, caml_body! and others are available.

Documentation

https://docs.rs/raml/

Usage

raml should work with a recent rustc (I test on 1.16), and does not require nightly.

Add to your Cargo.toml

[dependencies]
raml = "0.1.0"