Zinc-iron alloy coating is used in parts that need very good corrosion protection.
API IS CONSIDERED UNSTABLE AT THE MOMENT AND IS LIKELY TO CHANGE IN THE FUTURE
ocaml-interop is an OCaml<->Rust FFI with an emphasis on safety inspired by caml-oxide, ocaml-rs and CAMLroot.
Read the full documentation here.
Report issues on Github.
rust
let rust_string = ocaml_string.to_rust();
// `cr` = OCaml runtime handle
let new_ocaml_string = rust_string.to_ocaml(cr);
ocaml
(* OCaml *)
type my_record = {
string_field: string;
tuple_field: (string * int);
}
```rust // Rust struct MyStruct { stringfield: String, tuplefield: (String, i64), }
implconvocamlrecord! { MyStruct { stringfield: String, tuple_field: (String, i64), } }
// ...
let ruststruct = ocamlrecord.torust(); let newocamlrecord = ruststruct.to_ocaml(cr); ```
ocaml
(* OCaml *)
type my_variant =
| EmptyTag
| TagWithInt of int
```rust // Rust enum MyEnum { EmptyTag, TagWithInt(i64), }
implconvocaml_variant! { MyEnum { EmptyTag, TagWithInt(OCamlInt), } }
// ...
let rustenum = ocamlvariant.torust(); let newocamlvariant = rustenum.to_ocaml(cr); ```
ocaml
(* OCaml *)
Callback.register "ocaml_print_endline" print_endline
```rust // Rust ocaml! { fn ocamlprintendline(s: String); }
// ...
let ocamlstring = "hello OCaml!".toboxroot(cr); ocamlprintendline(cr, &ocaml_string); ```
rust
// Rust
ocaml_export! {
pub fn twice_boxed_int(cr, num: OCamlRef<OCamlInt64>) -> OCaml<OCamlInt64> {
let num = num.to_rust(cr);
let result = num * 2;
result.to_ocaml(cr)
}
}
```ocaml (* OCaml *) external rusttwiceboxedint: int64 -> int64 = "twiceboxed_int"
(* ... *)
let result = rusttwiceboxed_int 123L in (* ... *) ```