mockforge_core/codegen/mod.rs
1//! Code generation from OpenAPI specifications
2//!
3//! This module provides functionality for generating executable mock server code
4//! from OpenAPI specifications, supporting multiple output languages and frameworks.
5
6pub mod backend_generator;
7pub mod rust_generator;
8pub mod typescript_generator;
9
10#[cfg(test)]
11mod tests;
12
13use crate::openapi::spec::OpenApiSpec;
14use crate::Result;
15
16/// Configuration for code generation
17#[derive(Debug, Clone, Default)]
18pub struct CodegenConfig {
19 /// Generate mock data strategy
20 pub mock_data_strategy: MockDataStrategy,
21 /// Server port (for generated code)
22 pub port: Option<u16>,
23 /// Enable CORS
24 pub enable_cors: bool,
25 /// Response delay simulation (milliseconds)
26 pub default_delay_ms: Option<u64>,
27}
28
29/// Strategy for generating mock data in generated code
30#[derive(Debug, Clone, Copy, PartialEq, Eq)]
31pub enum MockDataStrategy {
32 /// Generate random data from schemas (fuzzing-style)
33 Random,
34 /// Use examples from OpenAPI spec (deterministic)
35 Examples,
36 /// Use schema defaults when available
37 Defaults,
38 /// Prefer examples, fallback to random when examples are missing
39 ExamplesOrRandom,
40}
41
42impl Default for MockDataStrategy {
43 fn default() -> Self {
44 Self::ExamplesOrRandom
45 }
46}
47
48/// Generate mock server code from OpenAPI spec
49///
50/// # Arguments
51/// * `spec` - The OpenAPI specification to generate code from
52/// * `language` - The target language (rs, ts, js)
53/// * `config` - Code generation configuration
54///
55/// # Returns
56/// Generated source code as a string
57pub fn generate_mock_server_code(
58 spec: &OpenApiSpec,
59 language: &str,
60 config: &CodegenConfig,
61) -> Result<String> {
62 match language {
63 "rs" | "rust" => rust_generator::generate(spec, config),
64 "ts" | "typescript" => typescript_generator::generate(spec, config),
65 "js" | "javascript" => typescript_generator::generate(spec, config),
66 _ => Err(crate::Error::generic(format!(
67 "Unsupported language: {}. Supported: rust, typescript, javascript",
68 language
69 ))),
70 }
71}