use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
use super::FfiTargetDepOverride;
pub(crate) const DEFAULT_NIF_TARGETS: [&str; 4] = [
"aarch64-apple-darwin",
"aarch64-unknown-linux-gnu",
"x86_64-unknown-linux-gnu",
"x86_64-pc-windows-msvc",
];
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ElixirConfig {
pub app_name: Option<String>,
#[serde(default)]
pub features: Option<Vec<String>>,
#[serde(default)]
pub nif_features: Option<Vec<String>>,
#[serde(default)]
pub serde_rename_all: Option<String>,
#[serde(default)]
pub exclude_functions: Vec<String>,
#[serde(default)]
pub exclude_types: Vec<String>,
#[serde(default)]
#[schemars(with = "HashMap<String, serde_json::Value>")]
pub extra_dependencies: HashMap<String, toml::Value>,
#[serde(default)]
pub scaffold_output: Option<PathBuf>,
#[serde(default)]
pub rename_fields: HashMap<String, String>,
#[serde(default)]
pub run_wrapper: Option<String>,
#[serde(default)]
pub extra_lint_paths: Vec<String>,
#[serde(default)]
pub cpu_bound_functions: Vec<String>,
#[serde(default)]
pub nif_targets: Vec<String>,
#[serde(default)]
pub target_dep_overrides: Vec<FfiTargetDepOverride>,
#[serde(default)]
pub excluded_default_features: Vec<String>,
}