Create a new rust crate and make sure to specify crate-type to be "dylib".
Also add rutie
, rutie-serde
, serde
and possibly serde_derive
as a dependency.
```toml [package] edition = "2018"
[lib] crate-type = ["dylib"] name = "rubyrustdemo"
[dependencies] rutie = "0.8" rutie-serde = "0.2" serde = "1.0" serde_derive = "1.0" ```
The usage is very similar to how you would use rutie
on it's own, but instead of calling
rutie_methods!
macro, you call rutie_serde_methods!
.
This macro takes care of deserializing arguments and serializing return values.
It also captures all panics inside those methods and raises them as an exception in ruby.
```rust use rutie::{class, Class, Object}; use rutieserde::{rubyclass, rutieserdemethods}; use serde_derive::{Deserialize, Serialize};
pub struct User { pub name: String, pub id: u64, }
class!(HelloWorld); rutieserdemethods!( HelloWorld, itself, rubyclass!(Exception), fn hello(name: String) -> String { format!("Hello {}", name) } fn hello_user(user: User) -> String { format!("Hello {:?}", user) } );
pub extern "C" fn Initrubyrustdemo() { let mut class = Class::new("RubyRustDemo", None); class.define(|itself| itself.defself("hello", hello)); class.define(|itself| itself.defself("hellouser", hello_user)); } ```