![goats are actually the best animal ever invented](https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Hausziege_04.jpg/480px-Hausziege_04.jpg) # 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: ```rust caml!(ml_beef, |parameter|, , { 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` ```toml [dependencies] raml = "0.1.0" ```