/// Runs `{{ method_name }}`'s Rust default body for [`{{ wrapper_name }}`] while routing
/// every other trait method back through the bridge, so the default body's `self.*`
/// calls still reach host overrides.
#[derive(Debug)]
struct {{ delegate_name }}<'a>(&'a {{ wrapper_name }});
{%- if super_trait_path %}
impl {{ super_trait_path }} for {{ delegate_name }}<'_> {
fn name(&self) -> &str {
{{ super_trait_path }}::name(self.0)
}
fn version(&self) -> String {
{{ super_trait_path }}::version(self.0)
}
fn initialize(&self) -> std::result::Result<(), {{ error_path }}> {
{{ super_trait_path }}::initialize(self.0)
}
fn shutdown(&self) -> std::result::Result<(), {{ error_path }}> {
{{ super_trait_path }}::shutdown(self.0)
}
}
{%- endif %}
{%- if has_async_methods %}
{%- if async_trait_is_send %}
#[async_trait::async_trait]
{%- else %}
#[async_trait::async_trait(?Send)]
{%- endif %}
{%- else %}
{% endif %}
impl {{ trait_path }} for {{ delegate_name }}<'_> {
{%- for m in methods %}
{{ m.async_kw }}fn {{ m.name }}({{ m.all_params }}) -> {{ m.ret }} {
{{ m.forward_call }}
}
{% if not loop.last %}
{% endif %}
{%- endfor %}
}