let inner_obj = self.inner;
let cached_name = self.cached_name.clone();
{% for param_name in string_params %}
let {{ param_name }} = {{ param_name }}.clone();
{% endfor %}
// SAFETY: PHP objects are single-threaded within a request.
// The block_on executes within the async runtime.
WORKER_RUNTIME.block_on(async {
match unsafe { (*inner_obj).try_call_method("{{ method_name }}", {{ args_expr }}) } {
{% if is_result_type %}
Ok(val) => {
let json_str = val.string().unwrap_or_default();
serde_json::from_str(&json_str).map_err(|e| {{ core_import }}::KreuzbergError::Other(format!("Deserialize error: {}", e)))
}
{% else %}
Ok(val) => val.string().unwrap_or_default().parse().unwrap_or_default(),
{% endif %}
Err(e) => Err({{ core_import }}::KreuzbergError::Plugin {
message: format!("Plugin '{}' method '{{ method_name }}' failed: {}", cached_name, e),
plugin_name: cached_name.clone(),
}),
}
})