21 个版本 (1 个稳定版)
使用旧的 Rust 2015
1.0.0 | 2016 年 12 月 19 日 |
---|---|
0.5.1 | 2016 年 4 月 29 日 |
0.4.3 | 2016 年 4 月 26 日 |
0.3.2 | 2016 年 4 月 7 日 |
0.1.1 | 2016 年 2 月 27 日 |
#4 in #mruby
每月 136 次下载
用于 anima-engine
370KB
4.5K SLoC
mrusty. 为 Rust 提供的 mruby 安全绑定
[] (https://travis-ci.org/anima-engine/mrusty) [![Coverage Status] (https://coveralls.io/repos/github/anima-engine/mrusty/badge.svg?branch=master)] (https://coveralls.io/github/anima-engine/mrusty?branch=master) [] (https://crates.io/crates/mrusty)
mrusty 让您
- 使用非常受限的 API 运行 Ruby 1.9 文件(无需安装 Ruby)
- 在 mruby 中反射 Rust 的
struct
和enum
,并运行它们
它以安全且整洁的方式完成所有这些,同时还将规范测试和 REPL 带到桌面上。
文档
示例
一个非常简单的示例,它是一个将传递给 mruby 且可完美调用的 Container struct
// mrusty_class!
#[macro_use]
extern crate mrusty;
use mrusty::{Mruby, MrubyImpl};
let mruby = Mruby::new();
struct Cont {
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".
依赖项
~0–2.2MB
~26K SLoC