use boltffi_ffi_rules::naming;
pub struct NamingConvention;
impl NamingConvention {
pub fn class_name(name: &str) -> String {
naming::to_upper_camel_case(name)
}
pub fn namespace(name: &str) -> String {
naming::to_upper_camel_case(name)
}
pub fn method_name(name: &str) -> String {
let converted = naming::to_upper_camel_case(name);
Self::escape_keyword(&converted)
}
pub fn property_name(name: &str) -> String {
let converted = naming::to_upper_camel_case(name);
Self::escape_keyword(&converted)
}
pub fn field_name(name: &str) -> String {
let converted = naming::snake_to_camel(name);
Self::escape_keyword(&converted)
}
pub fn escape_keyword(name: &str) -> String {
if Self::is_csharp_keyword(name) {
format!("@{}", name)
} else {
name.to_string()
}
}
fn is_csharp_keyword(name: &str) -> bool {
matches!(
name,
"abstract"
| "as"
| "base"
| "bool"
| "break"
| "byte"
| "case"
| "catch"
| "char"
| "checked"
| "class"
| "const"
| "continue"
| "decimal"
| "default"
| "delegate"
| "do"
| "double"
| "else"
| "enum"
| "event"
| "explicit"
| "extern"
| "false"
| "finally"
| "fixed"
| "float"
| "for"
| "foreach"
| "goto"
| "if"
| "implicit"
| "in"
| "int"
| "interface"
| "internal"
| "is"
| "lock"
| "long"
| "namespace"
| "new"
| "null"
| "object"
| "operator"
| "out"
| "override"
| "params"
| "private"
| "protected"
| "public"
| "readonly"
| "ref"
| "return"
| "sbyte"
| "sealed"
| "short"
| "sizeof"
| "stackalloc"
| "static"
| "string"
| "struct"
| "switch"
| "this"
| "throw"
| "true"
| "try"
| "typeof"
| "uint"
| "ulong"
| "unchecked"
| "unsafe"
| "ushort"
| "using"
| "virtual"
| "void"
| "volatile"
| "while"
)
}
pub fn ffi_prefix() -> String {
naming::ffi_prefix().to_string()
}
pub fn class_ffi_prefix(class_name: &str) -> String {
naming::class_ffi_prefix(class_name).into_string()
}
}