alef-backend-zig 0.15.7

Zig backend for alef
Documentation
use minijinja::Environment;

static TEMPLATES: &[(&str, &str)] = &[
    ("type_header.jinja", include_str!("../templates/type_header.jinja")),
    ("type_field.jinja", include_str!("../templates/type_field.jinja")),
    (
        "enum_unit_header.jinja",
        include_str!("../templates/enum_unit_header.jinja"),
    ),
    (
        "enum_unit_variant.jinja",
        include_str!("../templates/enum_unit_variant.jinja"),
    ),
    (
        "enum_tagged_header.jinja",
        include_str!("../templates/enum_tagged_header.jinja"),
    ),
    (
        "enum_variant_void.jinja",
        include_str!("../templates/enum_variant_void.jinja"),
    ),
    (
        "enum_variant_single.jinja",
        include_str!("../templates/enum_variant_single.jinja"),
    ),
    (
        "enum_variant_struct_header.jinja",
        include_str!("../templates/enum_variant_struct_header.jinja"),
    ),
    (
        "enum_variant_struct_field.jinja",
        include_str!("../templates/enum_variant_struct_field.jinja"),
    ),
    (
        "error_set_header.jinja",
        include_str!("../templates/error_set_header.jinja"),
    ),
    (
        "error_set_variant.jinja",
        include_str!("../templates/error_set_variant.jinja"),
    ),
    (
        "function_signature.jinja",
        include_str!("../templates/function_signature.jinja"),
    ),
    (
        "function_call_unit.jinja",
        include_str!("../templates/function_call_unit.jinja"),
    ),
    (
        "function_call_result.jinja",
        include_str!("../templates/function_call_result.jinja"),
    ),
    (
        "function_error_check.jinja",
        include_str!("../templates/function_error_check.jinja"),
    ),
    (
        "function_error_return.jinja",
        include_str!("../templates/function_error_return.jinja"),
    ),
    (
        "function_return.jinja",
        include_str!("../templates/function_return.jinja"),
    ),
    (
        "param_string_alloc.jinja",
        include_str!("../templates/param_string_alloc.jinja"),
    ),
    (
        "param_string_line1.jinja",
        include_str!("../templates/param_string_line1.jinja"),
    ),
    (
        "param_string_line2.jinja",
        include_str!("../templates/param_string_line2.jinja"),
    ),
    ("param_free.jinja", include_str!("../templates/param_free.jinja")),
    (
        "return_unwrap_slice.jinja",
        include_str!("../templates/return_unwrap_slice.jinja"),
    ),
    (
        "return_unwrap_free.jinja",
        include_str!("../templates/return_unwrap_free.jinja"),
    ),
    ("c_import.jinja", include_str!("../templates/c_import.jinja")),
    (
        "helper_free_string_doc1.jinja",
        include_str!("../templates/helper_free_string_doc1.jinja"),
    ),
    (
        "helper_free_string_doc2.jinja",
        include_str!("../templates/helper_free_string_doc2.jinja"),
    ),
    (
        "helper_free_string_doc3.jinja",
        include_str!("../templates/helper_free_string_doc3.jinja"),
    ),
    (
        "helper_free_string_body.jinja",
        include_str!("../templates/helper_free_string_body.jinja"),
    ),
    (
        "helper_last_error_code.jinja",
        include_str!("../templates/helper_last_error_code.jinja"),
    ),
    (
        "helper_last_error_ctx.jinja",
        include_str!("../templates/helper_last_error_ctx.jinja"),
    ),
    (
        "vtable_header_doc.jinja",
        include_str!("../templates/vtable_header_doc.jinja"),
    ),
    (
        "vtable_impl_method.jinja",
        include_str!("../templates/vtable_impl_method.jinja"),
    ),
    (
        "vtable_make_fn_header.jinja",
        include_str!("../templates/vtable_make_fn_header.jinja"),
    ),
    (
        "vtable_instance_field.jinja",
        include_str!("../templates/vtable_instance_field.jinja"),
    ),
    (
        "vtable_field_name_fn.jinja",
        include_str!("../templates/vtable_field_name_fn.jinja"),
    ),
    (
        "vtable_field_version_fn.jinja",
        include_str!("../templates/vtable_field_version_fn.jinja"),
    ),
    (
        "vtable_field_initialize_fn.jinja",
        include_str!("../templates/vtable_field_initialize_fn.jinja"),
    ),
    (
        "vtable_field_shutdown_fn.jinja",
        include_str!("../templates/vtable_field_shutdown_fn.jinja"),
    ),
    (
        "vtable_method_field.jinja",
        include_str!("../templates/vtable_method_field.jinja"),
    ),
    (
        "vtable_free_user_data.jinja",
        include_str!("../templates/vtable_free_user_data.jinja"),
    ),
    (
        "thunk_struct_header.jinja",
        include_str!("../templates/thunk_struct_header.jinja"),
    ),
    (
        "thunk_fn_signature.jinja",
        include_str!("../templates/thunk_fn_signature.jinja"),
    ),
    (
        "thunk_bytes_slice.jinja",
        include_str!("../templates/thunk_bytes_slice.jinja"),
    ),
    (
        "thunk_result_assign.jinja",
        include_str!("../templates/thunk_result_assign.jinja"),
    ),
    (
        "thunk_if_fallible.jinja",
        include_str!("../templates/thunk_if_fallible.jinja"),
    ),
    (
        "thunk_if_ok_result.jinja",
        include_str!("../templates/thunk_if_ok_result.jinja"),
    ),
    (
        "thunk_if_error.jinja",
        include_str!("../templates/thunk_if_error.jinja"),
    ),
    (
        "thunk_infallible_return.jinja",
        include_str!("../templates/thunk_infallible_return.jinja"),
    ),
    (
        "trait_vtable_header.jinja",
        include_str!("../templates/trait_vtable_header.jinja"),
    ),
    (
        "trait_struct_header.jinja",
        include_str!("../templates/trait_struct_header.jinja"),
    ),
    (
        "trait_method_doc.jinja",
        include_str!("../templates/trait_method_doc.jinja"),
    ),
    (
        "trait_method_signature.jinja",
        include_str!("../templates/trait_method_signature.jinja"),
    ),
    (
        "register_fn_doc1.jinja",
        include_str!("../templates/register_fn_doc1.jinja"),
    ),
    (
        "register_fn_doc2.jinja",
        include_str!("../templates/register_fn_doc2.jinja"),
    ),
    (
        "register_fn_signature.jinja",
        include_str!("../templates/register_fn_signature.jinja"),
    ),
    (
        "register_fn_body.jinja",
        include_str!("../templates/register_fn_body.jinja"),
    ),
    (
        "unregister_fn_doc.jinja",
        include_str!("../templates/unregister_fn_doc.jinja"),
    ),
    (
        "unregister_fn_signature.jinja",
        include_str!("../templates/unregister_fn_signature.jinja"),
    ),
    (
        "unregister_fn_body.jinja",
        include_str!("../templates/unregister_fn_body.jinja"),
    ),
    (
        "make_vtable_doc_header.jinja",
        include_str!("../templates/make_vtable_doc_header.jinja"),
    ),
    (
        "make_vtable_lifecycle_name.jinja",
        include_str!("../templates/make_vtable_lifecycle_name.jinja"),
    ),
    (
        "make_vtable_lifecycle_version.jinja",
        include_str!("../templates/make_vtable_lifecycle_version.jinja"),
    ),
    (
        "make_vtable_lifecycle_initialize.jinja",
        include_str!("../templates/make_vtable_lifecycle_initialize.jinja"),
    ),
    (
        "make_vtable_lifecycle_shutdown.jinja",
        include_str!("../templates/make_vtable_lifecycle_shutdown.jinja"),
    ),
];

pub(crate) fn make_env() -> Environment<'static> {
    let mut env = Environment::new();
    env.set_trim_blocks(true);
    env.set_lstrip_blocks(true);
    env.set_keep_trailing_newline(true);
    for (name, src) in TEMPLATES {
        env.add_template(name, src).expect("built-in template is valid");
    }
    env
}

pub(crate) fn render(template_name: &str, ctx: minijinja::Value) -> String {
    make_env()
        .get_template(template_name)
        .unwrap_or_else(|_| panic!("template {template_name} not found"))
        .render(ctx)
        .unwrap_or_else(|e| panic!("template {template_name} failed to render: {e}"))
}