4 个版本 (2 个重大更改)
0.3.0 | 2021 年 7 月 12 日 |
---|---|
0.2.0 | 2021 年 1 月 20 日 |
0.1.1 | 2019 年 1 月 4 日 |
0.1.0 | 2019 年 1 月 3 日 |
#466 在 编码
1,981 每月下载量
53KB
1K SLoC
使用示例
创建一个新的 Rust 包,并确保将 crate-type 指定为 "dylib"。然后添加 rutie
,rutie-serde
,serde
以及可能 serde_derive
作为依赖项。
[package]
edition = "2018"
[lib]
crate-type = ["dylib"]
name = "ruby_rust_demo"
[dependencies]
rutie = "0.8"
rutie-serde = "0.2"
serde = "1.0"
serde_derive = "1.0"
使用方式与单独使用 rutie
类似,但不是调用 rutie_methods!
宏,而是调用 rutie_serde_methods!
宏。此宏负责反序列化参数和序列化返回值。它还捕获这些方法内的所有 panic 并在 Ruby 中引发异常。
use rutie::{class, Class, Object};
use rutie_serde::{ruby_class, rutie_serde_methods};
use serde_derive::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct User {
pub name: String,
pub id: u64,
}
class!(HelloWorld);
rutie_serde_methods!(
HelloWorld,
_itself,
ruby_class!(Exception),
fn hello(name: String) -> String {
format!("Hello {}", name)
}
fn hello_user(user: User) -> String {
format!("Hello {:?}", user)
}
);
#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn Init_ruby_rust_demo() {
let mut class = Class::new("RubyRustDemo", None);
class.define(|itself| itself.def_self("hello", hello));
class.define(|itself| itself.def_self("hello_user", hello_user));
}
依赖项
~0.5–0.8MB
~15K SLoC