Skip to main content

nautilus_codegen/
enum_gen.rs

1//! Enum code generator.
2
3use nautilus_schema::ir::EnumIr;
4use std::collections::HashMap;
5use tera::Context;
6
7use crate::generator::TEMPLATES;
8
9/// Generate code for an enum type.
10pub fn generate_enum(enum_ir: &EnumIr) -> String {
11    let mut context = Context::new();
12    context.insert("enum_name", &enum_ir.logical_name);
13    context.insert("variants", &enum_ir.variants);
14
15    TEMPLATES
16        .render("enum.tera", &context)
17        .unwrap_or_else(|e| panic!("template rendering failed for enum: {:?}", e))
18}
19
20/// Generate code for all enums in the schema.
21pub fn generate_all_enums(enums: &HashMap<String, EnumIr>) -> String {
22    let mut output = String::new();
23
24    output.push_str("//! Generated enum types.\n\n");
25
26    for enum_ir in enums.values() {
27        output.push_str(&generate_enum(enum_ir));
28        output.push('\n');
29    }
30
31    output
32}