coffret 0.0.3

A crate for gems
Documentation
  • Coverage
  • 0%
    0 out of 13 items documented0 out of 10 items with examples
  • Size
  • Source code size: 5.86 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 333.71 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 24s Average build duration of successful builds.
  • all releases: 24s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • udzura

Coffret

A fancy wrapper of MRI C API.

Aiming to be nix for Ruby gem development.

Example

Before

use rb_sys::*;

fn test_show_self() // ...

#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn Init_hi_rust() {
    let name = CString::new("Rust").unwrap();
    let object = unsafe { rb_cObject };
    let klass = unsafe { rb_define_class(name.as_ptr(), object) };

    let function_name = CString::new("mostrarme").unwrap();
    let callback = unsafe {
        std::mem::transmute::<unsafe extern "C" fn(VALUE) -> VALUE, unsafe extern "C" fn() -> VALUE>(
            test_show_self,
        )
    };

    unsafe { rb_define_method(klass, function_name.as_ptr(), Some(callback), 0) }
}

After

use coffret::class;
use coffret::exception;

fn test_show_self() // ...

fn init_hi_rust_internal() -> Result<(), Box<dyn Error>> {
    let object = class::object_class();
    let klass = class::define_class("Rust", object);

    let callback = class::make_callback(&test_show_self);

    class::define_method(klass, "mostrarme", callback, 0);
    Ok(())
}

#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn Init_hi_rust() {
    match init_hi_rust_internal() {
        // Rust Error to Ruby's Exception. Isn't it cool?
        Err(e) => exception::rustly_raise(e.as_ref()),
        Ok(_) => {}
    }
}

MRI has bunch of APIs, so it is now under construction && any P/Rs are welcomed.

License

MIT.