Skip to content

Repository files navigation

mrusty. mruby safe bindings for Rust

Build StatusCoverage StatusCargo Crate

mrusty lets you:

  • run Ruby 1.9 files with a very restricted API (without having to install Ruby)
  • reflect Rust structs and enums in mruby and run them

It does all this in a safely neat way, while also bringing spec testing and a REPL to the table.

Example

A very simple example of a Container struct which will be passed to mruby and which is perfectly callable.

// mrusty_class!#[macro_use]externcrate mrusty;use mrusty::{Mruby,MrubyImpl};let mruby = Mruby::new();structCont{value:i32}// Cont should not flood the current namespace. We will add it with require.mrusty_class!(Cont,"Container",{// Converts mruby types automatically & safely.
def!("initialize", |v:i32| {Cont{ value: v }});// Converts slf to Cont.
def!("value", |mruby, slf:(&Cont)| {
mruby.fixnum(slf.value)});});// Add file to the context, making it requirable.
mruby.def_file::<Cont>("cont");// Add spec testing.describe!(Cont," context 'when containing 1' do it 'returns 1 when calling #value' do expect(Container.new(1).value).to eql 1 end end");let result = mruby.run(" require 'cont' Container.new(3).value").unwrap();// Returns Value.println!("{}", result.to_i32().unwrap());// Prints "3".

About

mruby safe bindings for Rust

Topics

Resources

Stars

205 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages