let args_json = serde_json::json!({
{% for a in args %}
"{{ a.name }}": {{ a.expr }},
{% endfor %}
})
.to_string();
let __resp = match self.__alef_dispatch("{{ method_name }}", &args_json) {
Ok(v) => v,
Err(e) => {
{% if has_error %}
return Err({{ dispatch_error_expr }});
{% else %}
let _ = e;
return Default::default();
{% endif %}
}
};
let mut __value: serde_json::Value = match serde_json::from_str(&__resp) {
Ok(v) => v,
Err(e) => {
{% if has_error %}
return Err({{ parse_error_expr }});
{% else %}
let _ = e;
return Default::default();
{% endif %}
}
};
if let Some(e) = __value.get("err").and_then(|v| v.as_str()) {
{% if has_error %}
return Err({{ host_error_expr }});
{% else %}
let _ = e;
return Default::default();
{% endif %}
}
{% if is_unit %}
{% if has_error %}
Ok(())
{% endif %}
{% else %}
let __ok = __value
.get_mut("ok")
.map(serde_json::Value::take)
.unwrap_or(serde_json::Value::Null);
{% if has_error %}
serde_json::from_value::<{{ return_ty }}>(__ok).map_err(|e| {{ deser_error_expr }})
{% else %}
serde_json::from_value::<{{ return_ty }}>(__ok).unwrap_or_default()
{% endif %}
{% endif %}