{% if has_error %}
{% if is_async %}
let Some(result) = run_or_throw(env, std::panic::AssertUnwindSafe(|| {{ async_call_expr }})) else {
return {{ ret_null }};
};
{% else %}
let result = {{ call_expr }};
{% endif %}
match result {
Err(e) => {
throw_jni_error(env, &format!("{e}"));
{{ ret_null }}
}
Ok(v) => {
{{ ok_body }} }
}
{% else %}
{% if is_async %}
let Some(v) = run_or_throw(env, std::panic::AssertUnwindSafe(|| {{ async_call_expr }})) else {
return {{ ret_null }};
};
{% else %}
let v = {{ call_expr }};
{% endif %}
{{ value_body }}{% endif %}
}