[package]
edition = "2024"
rust-version = "1.85"
name = "alef"
version = "0.23.21"
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Opinionated polyglot binding generator for Rust libraries"
homepage = "https://github.com/kreuzberg-dev/alef"
readme = "README.md"
keywords = [
"codegen",
"bindings",
"ffi",
"polyglot",
"pyo3",
]
categories = [
"development-tools::ffi",
"development-tools::build-utils",
]
license = "MIT"
repository = "https://github.com/kreuzberg-dev/alef"
[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/v{ version }/alef-{ target }{ archive-suffix }"
bin-dir = "alef-{ target }/{ bin }{ binary-ext }"
pkg-fmt = "tgz"
[package.metadata.binstall.overrides.x86_64-pc-windows-gnu]
pkg-fmt = "zip"
[package.metadata.cargo-machete]
ignored = ["tracing"]
[lib]
name = "alef"
path = "src/lib.rs"
[[bin]]
name = "alef"
path = "src/main.rs"
[[test]]
name = "adapters_adapter_test"
path = "tests/adapters_adapter_test.rs"
[[test]]
name = "backend_naming_helpers_hook"
path = "tests/backend_naming_helpers_hook.rs"
[[test]]
name = "backend_visitor_result_policy_test"
path = "tests/backend_visitor_result_policy_test.rs"
[[test]]
name = "backends_csharp_example_generation"
path = "tests/backends_csharp_example_generation.rs"
[[test]]
name = "backends_csharp_gen_bindings_test"
path = "tests/backends_csharp_gen_bindings_test.rs"
[[test]]
name = "backends_dart_binding_excluded_tuple_field_test"
path = "tests/backends_dart_binding_excluded_tuple_field_test.rs"
[[test]]
name = "backends_dart_docs_test"
path = "tests/backends_dart_docs_test.rs"
[[test]]
name = "backends_dart_gen_bindings_test"
path = "tests/backends_dart_gen_bindings_test.rs"
[[test]]
name = "backends_dart_gen_ffi_test"
path = "tests/backends_dart_gen_ffi_test.rs"
[[test]]
name = "backends_dart_gen_rust_crate_test"
path = "tests/backends_dart_gen_rust_crate_test.rs"
[[test]]
name = "backends_dart_snapshot_test"
path = "tests/backends_dart_snapshot_test.rs"
[[test]]
name = "backends_extendr_enum_conversions_test"
path = "tests/backends_extendr_enum_conversions_test.rs"
[[test]]
name = "backends_extendr_gen_bindings_test"
path = "tests/backends_extendr_gen_bindings_test.rs"
[[test]]
name = "backends_ffi_gen_bindings_test"
path = "tests/backends_ffi_gen_bindings_test.rs"
[[test]]
name = "backends_gleam_docs_test"
path = "tests/backends_gleam_docs_test.rs"
[[test]]
name = "backends_gleam_gen_bindings_test"
path = "tests/backends_gleam_gen_bindings_test.rs"
[[test]]
name = "backends_gleam_snapshot_test"
path = "tests/backends_gleam_snapshot_test.rs"
[[test]]
name = "backends_go_cgo_vtable_type_test"
path = "tests/backends_go_cgo_vtable_type_test.rs"
[[test]]
name = "backends_go_gen_bindings_test"
path = "tests/backends_go_gen_bindings_test.rs"
[[test]]
name = "backends_go_gen_visitor_test"
path = "tests/backends_go_gen_visitor_test.rs"
[[test]]
name = "backends_go_go_emission_test"
path = "tests/backends_go_go_emission_test.rs"
[[test]]
name = "backends_go_snapshot_test"
path = "tests/backends_go_snapshot_test.rs"
[[test]]
name = "backends_java_docs_emission_test"
path = "tests/backends_java_docs_emission_test.rs"
[[test]]
name = "backends_java_gen_bindings_test"
path = "tests/backends_java_gen_bindings_test.rs"
[[test]]
name = "backends_java_serde_default_sealed_interface_test"
path = "tests/backends_java_serde_default_sealed_interface_test.rs"
[[test]]
name = "backends_java_serde_default_tuple_test"
path = "tests/backends_java_serde_default_tuple_test.rs"
[[test]]
name = "backends_java_snapshot_test"
path = "tests/backends_java_snapshot_test.rs"
[[test]]
name = "backends_jni_gen_shims_test"
path = "tests/backends_jni_gen_shims_test.rs"
[[test]]
name = "backends_kotlin_android_docs_emission_test"
path = "tests/backends_kotlin_android_docs_emission_test.rs"
[[test]]
name = "backends_kotlin_android_gen_bindings_test"
path = "tests/backends_kotlin_android_gen_bindings_test.rs"
[[test]]
name = "backends_kotlin_android_snapshot_test"
path = "tests/backends_kotlin_android_snapshot_test.rs"
[[test]]
name = "backends_kotlin_docs_test"
path = "tests/backends_kotlin_docs_test.rs"
[[test]]
name = "backends_kotlin_gen_bindings_test"
path = "tests/backends_kotlin_gen_bindings_test.rs"
[[test]]
name = "backends_kotlin_gen_mpp_test"
path = "tests/backends_kotlin_gen_mpp_test.rs"
[[test]]
name = "backends_kotlin_gen_native_test"
path = "tests/backends_kotlin_gen_native_test.rs"
[[test]]
name = "backends_kotlin_jni_edge_cases_test"
path = "tests/backends_kotlin_jni_edge_cases_test.rs"
[[test]]
name = "backends_kotlin_jni_emitter_test"
path = "tests/backends_kotlin_jni_emitter_test.rs"
[[test]]
name = "backends_kotlin_snapshot_test"
path = "tests/backends_kotlin_snapshot_test.rs"
[[test]]
name = "backends_kotlin_test_literal_normalizer"
path = "tests/backends_kotlin_test_literal_normalizer.rs"
[[test]]
name = "backends_magnus_gen_bindings_test"
path = "tests/backends_magnus_gen_bindings_test.rs"
[[test]]
name = "backends_magnus_gen_stubs_test"
path = "tests/backends_magnus_gen_stubs_test.rs"
[[test]]
name = "backends_napi_gen_bindings_test"
path = "tests/backends_napi_gen_bindings_test.rs"
[[test]]
name = "backends_napi_trait_bridge_options_field_test"
path = "tests/backends_napi_trait_bridge_options_field_test.rs"
[[test]]
name = "backends_php_gen_bindings_test"
path = "tests/backends_php_gen_bindings_test.rs"
[[test]]
name = "backends_pyo3_gen_bindings_test"
path = "tests/backends_pyo3_gen_bindings_test.rs"
[[test]]
name = "backends_pyo3_gen_stubs_test"
path = "tests/backends_pyo3_gen_stubs_test.rs"
[[test]]
name = "backends_rustler_elixir_module_doc_test"
path = "tests/backends_rustler_elixir_module_doc_test.rs"
[[test]]
name = "backends_rustler_elixir_streaming_blank_lines_test"
path = "tests/backends_rustler_elixir_streaming_blank_lines_test.rs"
[[test]]
name = "backends_rustler_elixir_struct_typespec_test"
path = "tests/backends_rustler_elixir_struct_typespec_test.rs"
[[test]]
name = "backends_rustler_gen_public_api_test"
path = "tests/backends_rustler_gen_public_api_test.rs"
[[test]]
name = "backends_rustler_mut_ref_closure_test"
path = "tests/backends_rustler_mut_ref_closure_test.rs"
[[test]]
name = "backends_rustler_native_module_header_test"
path = "tests/backends_rustler_native_module_header_test.rs"
[[test]]
name = "backends_rustler_streaming_error_exception_test"
path = "tests/backends_rustler_streaming_error_exception_test.rs"
[[test]]
name = "backends_rustler_trait_bridge_test"
path = "tests/backends_rustler_trait_bridge_test.rs"
[[test]]
name = "backends_swift_codable_defaults_test"
path = "tests/backends_swift_codable_defaults_test.rs"
[[test]]
name = "backends_swift_gen_bindings_test"
path = "tests/backends_swift_gen_bindings_test.rs"
[[test]]
name = "backends_swift_gen_rust_crate_test"
path = "tests/backends_swift_gen_rust_crate_test.rs"
[[test]]
name = "backends_swift_json_string_overloads_test"
path = "tests/backends_swift_json_string_overloads_test.rs"
[[test]]
name = "backends_swift_snapshot_test"
path = "tests/backends_swift_snapshot_test.rs"
[[test]]
name = "backends_swift_trait_bridge_snapshot"
path = "tests/backends_swift_trait_bridge_snapshot.rs"
[[test]]
name = "backends_wasm_gen_bindings_test"
path = "tests/backends_wasm_gen_bindings_test.rs"
[[test]]
name = "backends_wasm_trait_bridge_options_field_test"
path = "tests/backends_wasm_trait_bridge_options_field_test.rs"
[[test]]
name = "backends_wasm_wasm_visitor_substitution"
path = "tests/backends_wasm_wasm_visitor_substitution.rs"
[[test]]
name = "backends_zig_docs_emission_test"
path = "tests/backends_zig_docs_emission_test.rs"
[[test]]
name = "backends_zig_docs_test"
path = "tests/backends_zig_docs_test.rs"
[[test]]
name = "backends_zig_gen_bindings_test"
path = "tests/backends_zig_gen_bindings_test.rs"
[[test]]
name = "backends_zig_snapshot_test"
path = "tests/backends_zig_snapshot_test.rs"
[[test]]
name = "cli_cleanup"
path = "tests/cli_cleanup.rs"
[[test]]
name = "cli_generate_format_flag"
path = "tests/cli_generate_format_flag.rs"
[[test]]
name = "cli_load_config"
path = "tests/cli_load_config.rs"
[[test]]
name = "cli_no_project_special_casing"
path = "tests/cli_no_project_special_casing.rs"
[[test]]
name = "codegen_async_body_tokio_braces"
path = "tests/codegen_async_body_tokio_braces.rs"
[[test]]
name = "codegen_integration_test"
path = "tests/codegen_integration_test.rs"
[[test]]
name = "config_schema_test"
path = "tests/config_schema_test.rs"
[[test]]
name = "core_setup_config_test"
path = "tests/core_setup_config_test.rs"
[[test]]
name = "e2e_brew_unsupported_in_call"
path = "tests/e2e_brew_unsupported_in_call.rs"
[[test]]
name = "e2e_c_gitignore_emission"
path = "tests/e2e_c_gitignore_emission.rs"
[[test]]
name = "e2e_c_makefile_smoke_and_test_targets"
path = "tests/e2e_c_makefile_smoke_and_test_targets.rs"
[[test]]
name = "e2e_c_result_type_name"
path = "tests/e2e_c_result_type_name.rs"
[[test]]
name = "e2e_cargo_toml_generation"
path = "tests/e2e_cargo_toml_generation.rs"
[[test]]
name = "e2e_codegen_kotlin_android_test_backend_snapshot"
path = "tests/e2e_codegen_kotlin_android_test_backend_snapshot.rs"
[[test]]
name = "e2e_codegen_rust_test_backend_snapshot"
path = "tests/e2e_codegen_rust_test_backend_snapshot.rs"
[[test]]
name = "e2e_codegen_rust_unused_var"
path = "tests/e2e_codegen_rust_unused_var.rs"
[[test]]
name = "e2e_csharp_config_type_inference"
path = "tests/e2e_csharp_config_type_inference.rs"
[[test]]
name = "e2e_csharp_enum_variant_struct"
path = "tests/e2e_csharp_enum_variant_struct.rs"
[[test]]
name = "e2e_csharp_opaque_streaming_wrapper"
path = "tests/e2e_csharp_opaque_streaming_wrapper.rs"
[[test]]
name = "e2e_csharp_serde_default_field"
path = "tests/e2e_csharp_serde_default_field.rs"
[[test]]
name = "e2e_csharp_trait_bridge_register_return"
path = "tests/e2e_csharp_trait_bridge_register_return.rs"
[[test]]
name = "e2e_csharp_tuple_default"
path = "tests/e2e_csharp_tuple_default.rs"
[[test]]
name = "e2e_dart_client_factory"
path = "tests/e2e_dart_client_factory.rs"
[[test]]
name = "e2e_dart_int_positional_arg"
path = "tests/e2e_dart_int_positional_arg.rs"
[[test]]
name = "e2e_dart_mime_type_positional_arg"
path = "tests/e2e_dart_mime_type_positional_arg.rs"
[[test]]
name = "e2e_dart_mock_server_build_error_string"
path = "tests/e2e_dart_mock_server_build_error_string.rs"
[[test]]
name = "e2e_dart_nullable_string_assertion"
path = "tests/e2e_dart_nullable_string_assertion.rs"
[[test]]
name = "e2e_dart_page_action_conditional"
path = "tests/e2e_dart_page_action_conditional.rs"
[[test]]
name = "e2e_dart_scalar_array_arg"
path = "tests/e2e_dart_scalar_array_arg.rs"
[[test]]
name = "e2e_dart_teardown_all_not_empty"
path = "tests/e2e_dart_teardown_all_not_empty.rs"
[[test]]
name = "e2e_elixir_keyword_opts_threshold"
path = "tests/e2e_elixir_keyword_opts_threshold.rs"
[[test]]
name = "e2e_elixir_plugin_trait_stubs"
path = "tests/e2e_elixir_plugin_trait_stubs.rs"
[[test]]
name = "e2e_elixir_tagged_enum"
path = "tests/e2e_elixir_tagged_enum.rs"
[[test]]
name = "e2e_elixir_unused_variable_prefix"
path = "tests/e2e_elixir_unused_variable_prefix.rs"
[[test]]
name = "e2e_exclude_categories"
path = "tests/e2e_exclude_categories.rs"
[[test]]
name = "e2e_field_path_array"
path = "tests/e2e_field_path_array.rs"
[[test]]
name = "e2e_generic_call_recipe"
path = "tests/e2e_generic_call_recipe.rs"
[[test]]
name = "e2e_gleam_client_factory"
path = "tests/e2e_gleam_client_factory.rs"
[[test]]
name = "e2e_go_mock_server_bootstrap_test"
path = "tests/e2e_go_mock_server_bootstrap_test.rs"
[[test]]
name = "e2e_go_scalar_return_handling"
path = "tests/e2e_go_scalar_return_handling.rs"
[[test]]
name = "e2e_java_enum_serde_default"
path = "tests/e2e_java_enum_serde_default.rs"
[[test]]
name = "e2e_java_from_json_codegen"
path = "tests/e2e_java_from_json_codegen.rs"
[[test]]
name = "e2e_java_json_object_arg_with_value"
path = "tests/e2e_java_json_object_arg_with_value.rs"
[[test]]
name = "e2e_java_mvnw_wrapper_test"
path = "tests/e2e_java_mvnw_wrapper_test.rs"
[[test]]
name = "e2e_java_serde_default_enum_uses_default_variant"
path = "tests/e2e_java_serde_default_enum_uses_default_variant.rs"
[[test]]
name = "e2e_kotlin_android_codegen"
path = "tests/e2e_kotlin_android_codegen.rs"
[[test]]
name = "e2e_kotlin_android_optional_config_arg"
path = "tests/e2e_kotlin_android_optional_config_arg.rs"
[[test]]
name = "e2e_kotlin_client_factory"
path = "tests/e2e_kotlin_client_factory.rs"
[[test]]
name = "e2e_kotlin_contains_string_field"
path = "tests/e2e_kotlin_contains_string_field.rs"
[[test]]
name = "e2e_language_resolution"
path = "tests/e2e_language_resolution.rs"
[[test]]
name = "e2e_mock_server_headers"
path = "tests/e2e_mock_server_headers.rs"
[[test]]
name = "e2e_mock_server_spawn_harness"
path = "tests/e2e_mock_server_spawn_harness.rs"
[[test]]
name = "e2e_mock_servers_url_emission"
path = "tests/e2e_mock_servers_url_emission.rs"
[[test]]
name = "e2e_php_accessor_extraction_ordering"
path = "tests/e2e_php_accessor_extraction_ordering.rs"
[[test]]
name = "e2e_php_chunks_count_min_non_streaming"
path = "tests/e2e_php_chunks_count_min_non_streaming.rs"
[[test]]
name = "e2e_php_config_fully_qualified"
path = "tests/e2e_php_config_fully_qualified.rs"
[[test]]
name = "e2e_php_enum_default_variant_in_from_impl"
path = "tests/e2e_php_enum_default_variant_in_from_impl.rs"
[[test]]
name = "e2e_php_optional_arg_slots_and_call_options_type"
path = "tests/e2e_php_optional_arg_slots_and_call_options_type.rs"
[[test]]
name = "e2e_php_serde_rename_all_respects_core_config"
path = "tests/e2e_php_serde_rename_all_respects_core_config.rs"
[[test]]
name = "e2e_ruby_array_literals_in_positional_args"
path = "tests/e2e_ruby_array_literals_in_positional_args.rs"
[[test]]
name = "e2e_ruby_not_error_only_fixtures"
path = "tests/e2e_ruby_not_error_only_fixtures.rs"
[[test]]
name = "e2e_rust_call_overrides"
path = "tests/e2e_rust_call_overrides.rs"
[[test]]
name = "e2e_rust_function_call_fixtures"
path = "tests/e2e_rust_function_call_fixtures.rs"
[[test]]
name = "e2e_rust_no_unused_imports"
path = "tests/e2e_rust_no_unused_imports.rs"
[[test]]
name = "e2e_rust_unused_mock_server"
path = "tests/e2e_rust_unused_mock_server.rs"
[[test]]
name = "e2e_swift_client_factory"
path = "tests/e2e_swift_client_factory.rs"
[[test]]
name = "e2e_swift_config_from_json_helper"
path = "tests/e2e_swift_config_from_json_helper.rs"
[[test]]
name = "e2e_swift_labelled_args"
path = "tests/e2e_swift_labelled_args.rs"
[[test]]
name = "e2e_swift_opaque_chain_and_vec_accessors"
path = "tests/e2e_swift_opaque_chain_and_vec_accessors.rs"
[[test]]
name = "e2e_swift_optional_chain_not_empty"
path = "tests/e2e_swift_optional_chain_not_empty.rs"
[[test]]
name = "e2e_swift_residual_e2e_codegen_bugs"
path = "tests/e2e_swift_residual_e2e_codegen_bugs.rs"
[[test]]
name = "e2e_swift_swift_format_ignore_header"
path = "tests/e2e_swift_swift_format_ignore_header.rs"
[[test]]
name = "e2e_typescript_oxfmt_idempotent"
path = "tests/e2e_typescript_oxfmt_idempotent.rs"
[[test]]
name = "e2e_typescript_trait_bridge_async_test"
path = "tests/e2e_typescript_trait_bridge_async_test.rs"
[[test]]
name = "e2e_validation_error_wrapping"
path = "tests/e2e_validation_error_wrapping.rs"
[[test]]
name = "e2e_wasm_language_auto_skip"
path = "tests/e2e_wasm_language_auto_skip.rs"
[[test]]
name = "e2e_wasm_non_http_fixtures"
path = "tests/e2e_wasm_non_http_fixtures.rs"
[[test]]
name = "e2e_wasm_pkg_nodejs_dep"
path = "tests/e2e_wasm_pkg_nodejs_dep.rs"
[[test]]
name = "e2e_zig_addtest_name"
path = "tests/e2e_zig_addtest_name.rs"
[[test]]
name = "e2e_zig_addtest_use_llvm_install"
path = "tests/e2e_zig_addtest_use_llvm_install.rs"
[[test]]
name = "e2e_zig_client_factory"
path = "tests/e2e_zig_client_factory.rs"
[[test]]
name = "e2e_zig_infallible_no_try"
path = "tests/e2e_zig_infallible_no_try.rs"
[[test]]
name = "e2e_zig_link_libc"
path = "tests/e2e_zig_link_libc.rs"
[[test]]
name = "e2e_zig_not_error_optional_result"
path = "tests/e2e_zig_not_error_optional_result.rs"
[[test]]
name = "e2e_zig_registry_dependency"
path = "tests/e2e_zig_registry_dependency.rs"
[[test]]
name = "e2e_zig_skip_negative_comparator"
path = "tests/e2e_zig_skip_negative_comparator.rs"
[[test]]
name = "project_mentions_hook"
path = "tests/project_mentions_hook.rs"
[[test]]
name = "service_api_jvm_symbol_consistency"
path = "tests/service_api_jvm_symbol_consistency.rs"
[[test]]
name = "service_api_no_stub_markers"
path = "tests/service_api_no_stub_markers.rs"
[[test]]
name = "swift_coding_keys_formatting_regression"
path = "tests/swift_coding_keys_formatting_regression.rs"
[[test]]
name = "swift_string_return_conversion_regression"
path = "tests/swift_string_return_conversion_regression.rs"
[[test]]
name = "swift_trait_bridge_vec_symbols"
path = "tests/swift_trait_bridge_vec_symbols.rs"
[[test]]
name = "swift_vec_opaque_accessors_regression"
path = "tests/swift_vec_opaque_accessors_regression.rs"
[[bench]]
name = "backends_dart_emit"
path = "benches/backends_dart_emit.rs"
harness = false
[[bench]]
name = "backends_gleam_emit"
path = "benches/backends_gleam_emit.rs"
harness = false
[[bench]]
name = "backends_kotlin_emit"
path = "benches/backends_kotlin_emit.rs"
harness = false
[[bench]]
name = "backends_swift_emit"
path = "benches/backends_swift_emit.rs"
harness = false
[[bench]]
name = "backends_zig_emit"
path = "benches/backends_zig_emit.rs"
harness = false
[dependencies.ahash]
version = "0.8"
[dependencies.anyhow]
version = "1"
[dependencies.base64]
version = "0.22"
[dependencies.blake3]
version = "1"
[dependencies.clap]
version = "4"
features = ["derive"]
[dependencies.glob]
version = "0.3"
[dependencies.heck]
version = "0.5"
[dependencies.jsonschema]
version = "0.46"
features = ["resolve-file"]
default-features = false
[dependencies.minijinja]
version = "2"
[dependencies.quote]
version = "1"
[dependencies.rayon]
version = "1"
[dependencies.regex]
version = "1"
[dependencies.schemars]
version = "1"
[dependencies.semver]
version = "1"
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.serde_yaml]
version = "0.9"
[dependencies.sha2]
version = "0.11"
[dependencies.similar]
version = "3"
[dependencies.syn]
version = "2"
features = [
"full",
"parsing",
"visit",
]
[dependencies.tempfile]
version = "3"
[dependencies.thiserror]
version = "2"
[dependencies.toml]
version = "1.1"
[dependencies.toml_edit]
version = "0.25"
[dependencies.tracing]
version = "0.1"
[dependencies.tracing-subscriber]
version = "0.3"
features = [
"fmt",
"env-filter",
]
[dependencies.ureq]
version = "3"
features = ["json"]
[dependencies.walkdir]
version = "2"
[dependencies.which]
version = "8"
[dependencies.zip]
version = "8"
features = ["deflate"]
default-features = false
[dev-dependencies.criterion]
version = "0.8"
features = ["html_reports"]
[dev-dependencies.insta]
version = "1.47"
features = ["redactions"]
[dev-dependencies.tracing-test]
version = "0.2"