openapi-nexus 0.1.4

OpenAPI 3.x multi-language code generator
Documentation
# Adding a Generator

This guide walks through adding a new language generator to openapi-nexus.

## 1. Add a GeneratorType variant

In `src/codegen/generator_type.rs`, add a new variant:

```rust
pub enum GeneratorType {
    TypeScriptFetch,
    GoHttp,
    // ...
    MyLang,  // <-- new
}
```

Implement the `Display` and `FromStr` traits to map the CLI name (e.g., `"my-lang"`) to the variant.

Also add the corresponding `Language` variant in `src/codegen/language.rs` if the target language doesn't exist yet.

## 2. Create the generator module

Create a new directory under `src/generators/`:

```
src/generators/my_lang/
├── mod.rs              Module root, exports the generator struct
├── sigil_emit.rs       Model emission (IR schemas → target-language types)
└── sigil_emit_api.rs   API emission (IR operations → client methods)
```

Add the module to `src/generators/mod.rs`.

## 3. Implement CodeGenerator

```rust
use crate::codegen::traits::code_generator::CodeGenerator;
use crate::codegen::traits::file_writer::{FileInfo, FileWriter};
use crate::ir::types::IrSpec;

pub struct MyLangCodeGenerator { /* config fields */ }

impl CodeGenerator for MyLangCodeGenerator {
    fn language(&self) -> Language { Language::MyLang }
    fn generator_type(&self) -> GeneratorType { GeneratorType::MyLang }

    fn generate(&self, ir: &IrSpec) -> Result<Vec<FileInfo>, Box<dyn Error + Send + Sync>> {
        // Transform IrSpec into generated source files
        todo!()
    }
}
```

## 4. Implement FileWriter

`FileWriter` writes `Vec<FileInfo>` to disk. A default implementation is provided, so you typically only need:

```rust
impl FileWriter for MyLangCodeGenerator {}
```

## 5. Register in the orchestrator

In `src/generators/registry.rs`, add the generator to the registry:

```rust
GeneratorType::MyLang => {
    Box::new(MyLangCodeGenerator::new(/* config */))
}
```

## 6. Add golden tests

1. Create `tests/golden_tests_my_lang.rs`
2. Use the `run_golden_test` harness from `openapi_nexus::codegen::test_utils`
3. Create golden files: `tests/golden/my_lang/my-lang/<fixture>/`
4. Generate initial goldens with `UPDATE_GOLDEN=1 cargo test --test golden_tests_my_lang`

See the [Golden Testing](golden_testing.md) chapter for details.

## 7. Add to CI

In `.github/workflows/ci.yml`, add a new entry to the golden-build matrix with the appropriate language toolchain setup and compile-check command.

Add a Justfile submodule at `just/golden-my-lang.just` with `update` and `build` recipes.