Attribute Macro minutus::wrap

source ·
#[wrap]
Expand description

Macro that generates RData definition for Rust types.

Example

See also data and extern_methods!

extern crate minutus;

// You can repeat `class_method` and `method` any times.
#[minutus::wrap(class_method = "new", method = "distance")]
struct Point {
    x: i64,
    y: i64,
}

impl Point {
    #[minutus::class_method]
    pub fn new(x: i64, y: i64) -> Self {
        Self { x, y }
    }

    #[minutus::method]
    pub fn distance(&self, other: &Point) -> f64 {
        (((self.x - other.x).pow(2) + (self.y - other.y).pow(2)) as f64).sqrt()
    }
}

fn main() {
    use minutus::types::TryFromMrb; // for using `Point::try_from_mrb`

    let runtime = minutus::Evaluator::build();

    // register class in mruby
    Point::define_class_on_mrb(runtime.mrb());

    runtime.evaluate(
      "
        p1 = Point.new(1,1)
        p2 = Point.new(2,2)
        p p1.distance(p2) # => prints 1.41421356
      "
    ).unwrap();
}