mrustymruby 对 Rust 的安全约束
mrusty 可以让你在 mruby 中使用 Rust 的结构和枚举并运行它们。
示例代码:
// mrfn! #[macro_use] extern crate mrusty; // Needs some undocumented, hidden calls. use mrusty::*; let mruby = MRuby::new(); struct Cont { value: i32 } // Cont should not flood the current namespace. We will add it with require. impl MRubyFile for Cont { fn require(mruby: MRubyType) { mruby.def_class::<Cont>("Container"); // Converts mruby types automatically & safely. // slf is always Value in initialize(). mruby.def_method::<Cont, _>("initialize", mrfn!(|_mruby, slf: Value, v: i32| { let cont = Cont { value: v }; slf.init(cont) })); mruby.def_method::<Cont, _>("value", mrfn!(|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".
评论