use crate::core::config::ResolvedCrateConfig;
use crate::core::template_versions::toolchain;
pub fn kotlin_package(config: &ResolvedCrateConfig) -> String {
config
.kotlin_android
.as_ref()
.and_then(|c| c.package.clone())
.unwrap_or_else(|| sanitize_package(&config.name))
}
pub fn namespace(config: &ResolvedCrateConfig) -> String {
config
.kotlin_android
.as_ref()
.and_then(|c| c.namespace.clone())
.unwrap_or_else(|| kotlin_package(config))
}
pub fn aar_artifact_id(config: &ResolvedCrateConfig) -> String {
config
.kotlin_android
.as_ref()
.and_then(|c| c.artifact_id.clone())
.unwrap_or_else(|| format!("{}-android", config.name.replace('_', "-")))
}
pub fn aar_group_id(config: &ResolvedCrateConfig) -> String {
config
.kotlin_android
.as_ref()
.and_then(|c| c.group_id.clone())
.unwrap_or_else(|| kotlin_package(config))
}
pub fn package_path(config: &ResolvedCrateConfig) -> String {
kotlin_package(config).replace('.', "/")
}
pub fn java_package(config: &ResolvedCrateConfig) -> String {
config.java_package()
}
pub fn java_package_path(config: &ResolvedCrateConfig) -> String {
java_package(config).replace('.', "/")
}
pub fn compile_sdk(config: &ResolvedCrateConfig) -> u32 {
config
.kotlin_android
.as_ref()
.and_then(|c| c.compile_sdk)
.unwrap_or_else(|| {
toolchain::ANDROID_COMPILE_SDK
.parse()
.expect("ANDROID_COMPILE_SDK must parse as u32")
})
}
pub fn min_sdk(config: &ResolvedCrateConfig) -> u32 {
config
.kotlin_android
.as_ref()
.and_then(|c| c.min_sdk)
.unwrap_or_else(|| {
toolchain::ANDROID_MIN_SDK
.parse()
.expect("ANDROID_MIN_SDK must parse as u32")
})
}
pub fn jvm_target(config: &ResolvedCrateConfig) -> String {
config
.kotlin_android
.as_ref()
.and_then(|c| c.jvm_target.clone())
.unwrap_or_else(|| toolchain::ANDROID_JVM_TARGET.to_string())
}
pub fn abis(config: &ResolvedCrateConfig) -> Vec<String> {
config
.kotlin_android
.as_ref()
.and_then(|c| c.abis.clone())
.filter(|v| !v.is_empty())
.unwrap_or_else(|| vec!["arm64-v8a".to_string(), "x86_64".to_string()])
}
pub fn host_platform_dir() -> &'static str {
if cfg!(target_os = "macos") {
"darwin"
} else if cfg!(target_os = "windows") {
"windows"
} else {
"linux"
}
}
pub const HOST_PLATFORMS: &[&str] = &["darwin", "linux", "windows"];
pub fn bridge_object_name(trait_name: &str) -> String {
format!("{trait_name}Bridge")
}
fn sanitize_package(name: &str) -> String {
name.replace('-', "_")
.chars()
.filter(|c| c.is_ascii_alphanumeric() || *c == '_' || *c == '.')
.collect()
}