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),
}
}