use crate::core::config::Language;
use crate::core::keywords::swift_case_ident;
use crate::docs::naming::{enum_variant_name, type_name};
use heck::ToLowerCamelCase;
pub(crate) fn format_enum_variant_ref(
enum_type_raw: &str,
variant_raw: &str,
lang: Language,
ffi_prefix: &str,
) -> String {
match lang {
Language::Go => format!(
"{}{}",
crate::codegen::naming::go_type_name(enum_type_raw),
crate::codegen::naming::to_go_name(variant_raw)
),
Language::Java => format!("{}.{variant_raw}", type_name(enum_type_raw, lang, ffi_prefix)),
Language::Swift => format!(
"{}.{}",
type_name(enum_type_raw, lang, ffi_prefix),
swift_case_ident(&variant_raw.to_lower_camel_case())
),
Language::Dart => format!(
"{}.{}",
type_name(enum_type_raw, lang, ffi_prefix),
crate::codegen::naming::dart_value_identifier(&variant_raw.to_lower_camel_case())
),
Language::Php => format!(
"{}::{}",
type_name(enum_type_raw, lang, ffi_prefix),
variant_raw.to_uppercase()
),
Language::Ruby | Language::Elixir => format!(":{}", enum_variant_name(variant_raw, lang, ffi_prefix)),
Language::R => format!("\"{}\"", enum_variant_name(variant_raw, lang, ffi_prefix)),
Language::Rust => format!(
"{}::{}",
type_name(enum_type_raw, lang, ffi_prefix),
enum_variant_name(variant_raw, lang, ffi_prefix)
),
Language::Ffi | Language::C | Language::Jni => enum_variant_name(variant_raw, lang, ffi_prefix),
Language::Python
| Language::Node
| Language::Wasm
| Language::Csharp
| Language::Kotlin
| Language::KotlinAndroid
| Language::Gleam
| Language::Zig => format!(
"{}.{}",
type_name(enum_type_raw, lang, ffi_prefix),
enum_variant_name(variant_raw, lang, ffi_prefix)
),
}
}