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编码

Download history 876/week @ 2024-03-14 664/week @ 2024-03-21 1059/week @ 2024-03-28 604/week @ 2024-04-04 775/week @ 2024-04-11 529/week @ 2024-04-18 425/week @ 2024-04-25 309/week @ 2024-05-02 280/week @ 2024-05-09 438/week @ 2024-05-16 186/week @ 2024-05-23 276/week @ 2024-05-30 388/week @ 2024-06-06 424/week @ 2024-06-13 573/week @ 2024-06-20 522/week @ 2024-06-27

1,981 每月下载量

MIT 许可证

53KB
1K SLoC

使用示例

创建一个新的 Rust 包,并确保将 crate-type 指定为 "dylib"。然后添加 rutierutie-serdeserde 以及可能 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