alef 0.62.1

Opinionated polyglot binding generator for Rust libraries
Documentation
{%- if type_class == "primitive_bool" %}
  {{ indent }}{{ expr }} as i32
{%- elif type_class == "primitive_other" %}
  {{ indent }}{{ expr }}
{%- elif type_class == "string" %}
  {{ indent }}match CString::new({{ expr }}.to_string()) {
  {{ indent }} Ok(cs) => cs.into_raw(),
  {{ indent }} Err(_) => {
  {{ indent }}  set_last_error(ALEF_FFI_CONVERSION_ERROR, "FFI field value contains an interior NUL byte");
  {{ indent }}  std::ptr::null_mut()
  {{ indent }} },
  {{ indent }}}
{%- elif type_class == "path" %}
  {{ indent }}match CString::new({{ expr }}.to_string_lossy().to_string()) {
  {{ indent }} Ok(cs) => cs.into_raw(),
  {{ indent }} Err(_) => {
  {{ indent }}  set_last_error(ALEF_FFI_CONVERSION_ERROR, "FFI path value contains an interior NUL byte");
  {{ indent }}  std::ptr::null_mut()
  {{ indent }} },
  {{ indent }}}
{%- elif type_class == "json_or_vec_or_map" %}
  {{ indent }}match serde_json::to_string(&{{ expr }}) {
  {{ indent }} Ok(s) => match CString::new(s) {
  {{ indent }} Ok(cs) => cs.into_raw(),
  {{ indent }} Err(_) => {
  {{ indent }}  set_last_error(ALEF_FFI_CONVERSION_ERROR, "FFI JSON value contains an interior NUL byte");
  {{ indent }}  std::ptr::null_mut()
  {{ indent }} },
  {{ indent }} },
  {{ indent }} Err(_) => {
  {{ indent }}  set_last_error(ALEF_FFI_CONVERSION_ERROR, "failed to serialize FFI field value");
  {{ indent }}  std::ptr::null_mut()
  {{ indent }} },
  {{ indent }}}
{%- elif type_class == "named_enum" %}
  {{ indent }}match insert_handle({{ copy_expr }}) {
  {{ indent }} Ok(handle) => handle,
  {{ indent }} Err(error) => { set_handle_error(&error); 0 },
  {{ indent }}}
{%- elif type_class == "named_clone" %}
  {{ indent }}match insert_handle({{ expr }}.clone()) {
  {{ indent }} Ok(handle) => handle,
  {{ indent }} Err(error) => { set_handle_error(&error); 0 },
  {{ indent }}}
{%- elif type_class == "named_owned" %}
  {{ indent }}match insert_handle({{ expr }}) {
  {{ indent }} Ok(handle) => handle,
  {{ indent }} Err(error) => { set_handle_error(&error); 0 },
  {{ indent }}}
{%- elif type_class == "named_non_clone" %}
  {{ indent }}0
{%- elif type_class == "bytes" %}
  {{ indent }}{{ expr }}.as_ptr() as *mut u8
{%- elif type_class == "duration" %}
  {{ indent }}{{ expr }}.as_millis() as u64
{%- elif type_class == "optional" %}
  {{ indent }}match &{{ expr }} {
  {{ indent }} Some(val) => {
  {{ inner_conversion }}
  {{ indent }} }
  {{ indent }} None => {{ null_value }},
  {{ indent }}}
{%- elif type_class == "optional_owned" %}
  {{ indent }}match {{ expr }} {
  {{ indent }} Some(val) => {
  {{ inner_conversion }}
  {{ indent }} }
  {{ indent }} None => {{ null_value }},
  {{ indent }}}
{%- endif %}