alef 0.114.0

Opinionated polyglot binding generator for Rust libraries
Documentation
/// Convert a `{{ rust_path }}` error to a JS `Error` with `code`, `kind`, status and retry properties.
#[allow(dead_code)]
fn {{ fn_name }}(e: {{ rust_path }}) -> wasm_bindgen::JsValue {
    let code = {{ code_fn_name }}(&e);
    let (kind, error_code): (&str, u32) = match &e {
{% for pattern, kind, code in kind_arms %}
        {{ pattern }} => ("{{ kind }}", {{ code }}),
{% endfor %}
        #[allow(unreachable_patterns)]
        _ => ("Unknown", {{ unknown_code }}),
    };
    let message = e.to_string();
    let obj = js_sys::Error::new(&message);
    js_sys::Reflect::set(&obj, &"code".into(), &code.into()).ok();
{% for name, value in properties %}
    js_sys::Reflect::set(&obj, &"{{ name }}".into(), &{{ value }}).ok();
{% endfor %}
{% if payload_variants %}
    let __alef_error_payload = js_sys::Object::create(&wasm_bindgen::JsValue::NULL.into());
{% if payload_variants | length == 1 %}
    if let {{ payload_variants[0][0] }} = &e {
{% for field in payload_variants[0][1] %}
        let {{ field.value }} = serde_wasm_bindgen::to_value({{ field.binding }})
            .unwrap_or(wasm_bindgen::JsValue::NULL);
        js_sys::Reflect::set(&__alef_error_payload, &"{{ field.name }}".into(), &{{ field.value }}).ok();
{% if field.expose_flat %}
        js_sys::Reflect::set(&obj, &"{{ field.name }}".into(), &{{ field.value }}).ok();
{% endif %}
{% endfor %}
    }
{% else %}
    match &e {
{% for pattern, fields in payload_variants %}
        {{ pattern }} => {
{% for field in fields %}
            let {{ field.value }} = serde_wasm_bindgen::to_value({{ field.binding }})
                .unwrap_or(wasm_bindgen::JsValue::NULL);
            js_sys::Reflect::set(&__alef_error_payload, &"{{ field.name }}".into(), &{{ field.value }}).ok();
{% if field.expose_flat %}
            js_sys::Reflect::set(&obj, &"{{ field.name }}".into(), &{{ field.value }}).ok();
{% endif %}
{% endfor %}
        },
{% endfor %}
        _ => {}
    }
{% endif %}
    js_sys::Reflect::set(&obj, &js_sys::Symbol::for_("alef.error.payload").into(), &__alef_error_payload).ok();
{% if attach_payload %}
    js_sys::Reflect::set(&obj, &"payload".into(), &__alef_error_payload).ok();
{% endif %}
{% endif %}
    obj.into()
}