alef 0.76.0

Opinionated polyglot binding generator for Rust libraries
Documentation
{%- if doc_comment %}
{{ doc_comment }}
{% endif -%}
{% if source_cfg -%}
#[cfg({{ source_cfg }})]
{% endif -%}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn {{ fn_name }}(
    client: AlefHandle,
    request_json: *const std::ffi::c_char,
    callback: {{ callback_type }},
    user_data: *mut std::ffi::c_void,
) -> i32 {
    catch_ffi_panic(1, || {
    clear_last_error();
    let requests = [HandleRequest { handle: client, expected_type: std::any::TypeId::of::<{{ qualified }}>() }];
    let values = match acquire_handles(&requests) {
        Ok(values) => values,
        Err(error) => { set_handle_error(&error); return -1; }
    };
    let mut guards = Vec::with_capacity(values.len());
    for (token, value) in &values {
        match value.lock() {
            Ok(guard) => guards.push((*token, guard)),
            Err(_) => { set_handle_error(&HandleError::RegistryPoisoned); return -1; }
        }
    }
    let client: *mut {{ qualified }} = match locked_handle_ptr::<{{ qualified }}>(&mut guards, client) {
        Ok(value) => value,
        Err(error) => { set_handle_error(&error); return -1; }
    };
{{ body_indented }}
    })
}