Skip to main content

openapi_nexus/codegen/traits/
code_generator.rs

1//! Trait for language-specific code generators
2
3use std::error::Error;
4
5use super::file_writer::FileInfo;
6use crate::ir::types::IrSpec;
7use crate::{GeneratorType, Language};
8
9/// Trait for code generators.
10///
11/// Generators receive a version-agnostic [`IrSpec`] (lowered by the
12/// orchestrator) and return a list of files. How a generator decomposes
13/// its pipeline internally is up to the implementation.
14pub trait CodeGenerator {
15    /// Returns the target language.
16    fn language(&self) -> Language;
17
18    /// Returns the generator type identifier.
19    fn generator_type(&self) -> GeneratorType;
20
21    /// Generate files from a lowered IR specification.
22    fn generate(&self, ir: &IrSpec) -> Result<Vec<FileInfo>, Box<dyn Error + Send + Sync>>;
23}