macro_rules! impl_from_ocaml_variant { ($ocaml_typ:ty => $rust_typ:ty { $($t:tt)* }) => { ... }; ($both_typ:ty { $($t:tt)* }) => { ... }; }
Expand description
Implements FromOCaml
for mapping an OCaml variant into a Rust enum.
It is important that the order of the fields remains the same as in the OCaml type declaration.
§Examples
enum Movement {
StepLeft,
StepRight,
Rotate(f64),
}
// Assuming an OCaml type declaration like:
//
// type movement =
// | StepLeft
// | StepRight
// | Rotate of float
//
// NOTE: What is important is the order of the tags, not their names.
impl_from_ocaml_variant! {
// Optionally, if Rust and OCaml types don't match:
// OCamlType => RustType { ... }
Movement {
// Alternative: StepLeft => Movement::StepLeft
// <anyname> => <build-expr>
Movement::StepLeft,
Movement::StepRight,
// Tag field names are mandatory
Movement::Rotate(rotation: OCamlFloat),
}
}