Skip to main content

openapi_nexus_common/
generator.rs

1//! Supported generator frameworks for code generation
2
3use clap::ValueEnum;
4use serde::{Deserialize, Serialize};
5
6use crate::language::Language;
7
8/// Supported generator frameworks for code generation
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, ValueEnum)]
10pub enum GeneratorType {
11    /// TypeScript client using Fetch API
12    #[serde(rename = "typescript-fetch")]
13    #[value(name = "typescript-fetch")]
14    TypeScriptFetch,
15    /// Go client using HTTP
16    #[serde(rename = "go-http")]
17    #[value(name = "go-http")]
18    GoHttp,
19}
20
21serde_plain::derive_display_from_serialize!(GeneratorType);
22serde_plain::derive_fromstr_from_deserialize!(GeneratorType);
23
24impl GeneratorType {
25    /// Extract the language from the generator
26    pub fn language(&self) -> Language {
27        match self {
28            GeneratorType::TypeScriptFetch => Language::TypeScript,
29            GeneratorType::GoHttp => Language::Go,
30        }
31    }
32
33    /// Extract framework name from generator enum
34    pub fn framework(&self) -> String {
35        match self {
36            GeneratorType::TypeScriptFetch => "fetch".to_string(),
37            GeneratorType::GoHttp => "http".to_string(),
38        }
39    }
40}