Skip to main content

openapi_nexus/codegen/
naming_convention.rs

1//! File naming conventions for code generation
2
3use std::fmt;
4use std::str::FromStr;
5
6use serde::{Deserialize, Serialize};
7
8/// File naming conventions for generated files
9#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
10pub enum NamingConvention {
11    /// Use camelCase for file names
12    CamelCase,
13    /// Use kebab-case for file names
14    KebabCase,
15    /// Use snake_case for file names
16    SnakeCase,
17    /// Use PascalCase for file names
18    PascalCase,
19}
20
21impl fmt::Display for NamingConvention {
22    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23        match self {
24            Self::CamelCase => write!(f, "camelCase"),
25            Self::KebabCase => write!(f, "kebab-case"),
26            Self::SnakeCase => write!(f, "snake_case"),
27            Self::PascalCase => write!(f, "PascalCase"),
28        }
29    }
30}
31
32impl FromStr for NamingConvention {
33    type Err = String;
34
35    fn from_str(s: &str) -> Result<Self, Self::Err> {
36        match s.to_lowercase().as_str() {
37            "camelcase" | "camel-case" => Ok(Self::CamelCase),
38            "kebabcase" | "kebab-case" => Ok(Self::KebabCase),
39            "snakecase" | "snake_case" => Ok(Self::SnakeCase),
40            "pascalcase" | "pascal-case" => Ok(Self::PascalCase),
41            _ => Err(format!(
42                "Invalid naming convention: '{}'. Expected one of: camelCase, kebab-case, snake_case, PascalCase",
43                s
44            )),
45        }
46    }
47}