pub mod ffi;
pub mod fields;
pub mod identifiers;
pub mod imports;
pub mod lookups;
pub mod naming;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
use crate::config::SourceCrate;
use crate::config::dto::DtoConfig;
use crate::config::e2e::E2eConfig;
use crate::config::extras::{AdapterConfig, Language};
use crate::config::languages::{
CSharpConfig, CustomModulesConfig, CustomRegistrationsConfig, DartConfig, ElixirConfig, FfiConfig, GleamConfig,
GoConfig, JavaConfig, KotlinConfig, NodeConfig, PhpConfig, PythonConfig, RConfig, RubyConfig, SwiftConfig,
WasmConfig, ZigConfig,
};
use crate::config::output::{
BuildCommandConfig, CleanConfig, ExcludeConfig, IncludeConfig, LintConfig, OutputConfig, ReadmeConfig,
ScaffoldConfig, SetupConfig, SyncConfig, TestConfig, UpdateConfig,
};
use crate::config::publish::PublishConfig;
use crate::config::tools::ToolsConfig;
use crate::config::trait_bridge::TraitBridgeConfig;
use crate::config::{FormatConfig, GenerateConfig};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolvedCrateConfig {
pub name: String,
pub sources: Vec<PathBuf>,
pub source_crates: Vec<SourceCrate>,
pub version_from: String,
pub core_import: Option<String>,
pub workspace_root: Option<PathBuf>,
pub skip_core_import: bool,
pub error_type: Option<String>,
pub error_constructor: Option<String>,
pub features: Vec<String>,
pub path_mappings: HashMap<String, String>,
pub extra_dependencies: HashMap<String, toml::Value>,
pub auto_path_mappings: bool,
pub languages: Vec<Language>,
pub python: Option<PythonConfig>,
pub node: Option<NodeConfig>,
pub ruby: Option<RubyConfig>,
pub php: Option<PhpConfig>,
pub elixir: Option<ElixirConfig>,
pub wasm: Option<WasmConfig>,
pub ffi: Option<FfiConfig>,
pub gleam: Option<GleamConfig>,
pub go: Option<GoConfig>,
pub java: Option<JavaConfig>,
pub dart: Option<DartConfig>,
pub kotlin: Option<KotlinConfig>,
pub swift: Option<SwiftConfig>,
pub csharp: Option<CSharpConfig>,
pub r: Option<RConfig>,
pub zig: Option<ZigConfig>,
pub exclude: ExcludeConfig,
pub include: IncludeConfig,
pub output_paths: HashMap<String, PathBuf>,
pub explicit_output: OutputConfig,
pub lint: HashMap<String, LintConfig>,
pub test: HashMap<String, TestConfig>,
pub setup: HashMap<String, SetupConfig>,
pub update: HashMap<String, UpdateConfig>,
pub clean: HashMap<String, CleanConfig>,
pub build_commands: HashMap<String, BuildCommandConfig>,
pub generate: GenerateConfig,
pub generate_overrides: HashMap<String, GenerateConfig>,
pub format: FormatConfig,
pub format_overrides: HashMap<String, FormatConfig>,
pub dto: DtoConfig,
pub tools: ToolsConfig,
pub opaque_types: HashMap<String, String>,
pub sync: Option<SyncConfig>,
pub publish: Option<PublishConfig>,
pub e2e: Option<E2eConfig>,
pub adapters: Vec<AdapterConfig>,
pub trait_bridges: Vec<TraitBridgeConfig>,
pub scaffold: Option<ScaffoldConfig>,
pub readme: Option<ReadmeConfig>,
pub custom_files: HashMap<String, Vec<PathBuf>>,
pub custom_modules: CustomModulesConfig,
pub custom_registrations: CustomRegistrationsConfig,
}
impl ResolvedCrateConfig {
pub fn output_for(&self, lang: &str) -> Option<&std::path::Path> {
self.output_paths.get(lang).map(|p| p.as_path())
}
pub fn targets(&self, lang: Language) -> bool {
self.languages.contains(&lang)
}
}