Sha256: e216fbc1e707684fd033a5ddf26f02e1a60391306c00a605bcb688b355d8a387

Contents?: true

Size: 918 Bytes

Versions: 17

Compression:

Stored size: 918 Bytes

Contents

extern crate rb_sys;

use rb_sys::{rb_define_module, rb_define_module_function, rb_utf8_str_new, VALUE};
use std::ffi::CString;

#[no_mangle]
unsafe extern "C" fn say_hello(_klass: VALUE) -> VALUE {
    let cstr = CString::new("Hello world!").unwrap();

    rb_utf8_str_new(cstr.as_ptr(), 12)
}

#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn Init_custom_name_ext() {
    let name = CString::new("CustomName").unwrap();
    let function_name = CString::new("say_hello").unwrap();
    // bindgen does not properly detect the arity of the ruby callback function, so we have to transmute
    let callback = unsafe {
        std::mem::transmute::<unsafe extern "C" fn(VALUE) -> VALUE, unsafe extern "C" fn() -> VALUE>(
            say_hello,
        )
    };
    let klass = unsafe { rb_define_module(name.as_ptr()) };

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

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
rubygems-update-3.4.22 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.21 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.20 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.19 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.18 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.17 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.16 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.15 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.14 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.13 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.12 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.11 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.10 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.9 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.8 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.7 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs
rubygems-update-3.4.6 test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs