use heck::{ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToUpperCamelCase};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CFunctionStyle {
Typedefs,
ForwardDeclarations,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CIndentationStyle {
Allman,
KAndR,
GNU,
Whitesmiths,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CNamingStyle {
Lowercase,
Uppercase,
LowerCamelCase,
UpperCamelCase,
SnakeCase,
ShoutySnakeCase,
}
pub(crate) trait ToNamingStyle {
fn to_naming_style(&self, style: &CNamingStyle) -> String;
}
impl ToNamingStyle for String {
fn to_naming_style(&self, style: &CNamingStyle) -> String {
self.as_str().to_naming_style(style)
}
}
impl ToNamingStyle for &str {
fn to_naming_style(&self, style: &CNamingStyle) -> String {
match style {
CNamingStyle::Lowercase => self.to_lowercase(),
CNamingStyle::Uppercase => self.to_uppercase(),
CNamingStyle::LowerCamelCase => self.to_lower_camel_case(),
CNamingStyle::UpperCamelCase => self.to_upper_camel_case(),
CNamingStyle::SnakeCase => self.to_snake_case(),
CNamingStyle::ShoutySnakeCase => self.to_shouty_snake_case(),
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CDocumentationStyle {
None,
Inline,
}
#[derive(Clone, Debug)]
pub struct Config {
pub directives: bool,
pub imports: bool,
pub additional_includes: Vec<String>,
pub ifndef: String,
pub custom_defines: String,
pub function_attribute: String,
pub file_header_comment: String,
pub prefix: String,
pub indentation: CIndentationStyle,
pub documentation: CDocumentationStyle,
pub type_naming: CNamingStyle,
pub enum_variant_naming: CNamingStyle,
pub const_naming: CNamingStyle,
pub function_parameter_naming: CNamingStyle,
pub function_style: CFunctionStyle,
}
impl Default for Config {
fn default() -> Self {
Self {
directives: true,
imports: true,
additional_includes: vec![],
file_header_comment: "// Automatically generated by Interoptopus.".to_string(),
ifndef: "interoptopus_generated".to_string(),
custom_defines: "".to_string(),
function_attribute: "".to_string(),
prefix: "".to_string(),
indentation: CIndentationStyle::Whitesmiths,
documentation: CDocumentationStyle::Inline,
type_naming: CNamingStyle::Lowercase,
enum_variant_naming: CNamingStyle::Uppercase,
const_naming: CNamingStyle::Uppercase,
function_parameter_naming: CNamingStyle::Lowercase,
function_style: CFunctionStyle::ForwardDeclarations,
}
}
}