alef 0.110.11

Opinionated polyglot binding generator for Rust libraries
Documentation
{% if signature %}
        #[pyo3(signature = ({{ signature }}))]
    #[allow(clippy::missing_errors_doc)]
{% else %}
        #[allow(clippy::missing_errors_doc)]
{% endif %}
    pub fn {{ method_name }}({{ params_str }}) -> pyo3::PyResult<pyo3::Py<pyo3::PyAny>> {
        const {{ capsule_cstr }}_NAME: &::std::ffi::CStr = c"{{ capsule_name }}";
{{ capsule_param_extract }}        let result = {{ core_call }}{{ err_map_suffix }};
        let raw_ptr = result.into_raw();
        // SAFETY: raw_ptr is a valid pointer derived from into_raw() on a value with program lifetime.
        let capsule_ptr = unsafe { pyo3::ffi::PyCapsule_New(raw_ptr as *mut _, {{ capsule_cstr }}_NAME.as_ptr(), None) };
        if capsule_ptr.is_null() {
            return Err(pyo3::exceptions::PyRuntimeError::new_err("Failed to create PyCapsule"));
        }
        // SAFETY: capsule_ptr is a valid, non-null Python object pointer we just created above.
{% if module_path %}
        let _capsule_obj = unsafe { pyo3::Bound::from_owned_ptr(py, capsule_ptr) };
        let _ts_mod = py.import("{{ module_path }}")?;
        let _cls = _ts_mod.getattr("{{ class_name }}")?;
        Ok(_cls.call1((_capsule_obj,))?.unbind())
{% else %}
        Ok(unsafe { pyo3::Bound::from_owned_ptr(py, capsule_ptr) }.unbind())
{% endif %}
    }