raml 0.1.0

Direct OCaml FFI bindings and runtime functions in Rust, without any C
Documentation
![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|, <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`

```toml
[dependencies]
raml = "0.1.0"
```