mod functions;
mod helpers;
mod native;
mod public_api;
mod public_api_args;
mod public_api_delegates;
mod public_files;
mod rust_items;
mod service_api;
#[cfg(test)]
mod tests;
mod types;
use crate::core::backend::{Backend, BuildConfig, BuildDependency, Capabilities, GeneratedFile};
use crate::core::config::{Language, ResolvedCrateConfig};
use crate::core::ir::ApiSurface;
pub struct RustlerBackend;
impl Backend for RustlerBackend {
fn name(&self) -> &str {
"rustler"
}
fn language(&self) -> Language {
Language::Elixir
}
fn capabilities(&self) -> Capabilities {
Capabilities {
supports_async: true,
supports_classes: true,
supports_enums: true,
supports_option: true,
supports_result: true,
supports_service_api: true,
..Capabilities::default()
}
}
fn generate_bindings(&self, api: &ApiSurface, config: &ResolvedCrateConfig) -> anyhow::Result<Vec<GeneratedFile>> {
native::generate_bindings(api, config)
}
fn generate_public_api(
&self,
api: &ApiSurface,
config: &ResolvedCrateConfig,
) -> anyhow::Result<Vec<GeneratedFile>> {
public_api::generate_public_api(api, config)
}
fn generate_service_api(
&self,
api: &ApiSurface,
config: &ResolvedCrateConfig,
) -> anyhow::Result<Vec<GeneratedFile>> {
service_api::generate(api, config)
}
fn build_config(&self) -> Option<BuildConfig> {
Some(BuildConfig {
tool: "mix",
crate_suffix: "-rustler",
build_dep: BuildDependency::None,
post_build: vec![],
})
}
}