#provider #generator #tera-templates #kcl #capitalize #field-type #cargo-toml #template-generation #hemmer

hemmer-provider-generator-generator

Code generation engine for Hemmer infrastructure providers

10 releases

0.3.5 Nov 3, 2025
0.3.4 Nov 3, 2025
0.2.2 Oct 30, 2025
0.1.2 Oct 29, 2025

#278 in Template engine

Download history 95/week @ 2025-10-23 130/week @ 2025-10-30

225 downloads per month
Used in hemmer-provider-generator

Apache-2.0

130KB
2.5K SLoC

Tera 1.5K SLoC Rust 1K SLoC // 0.1% comments

hemmer-provider-generator-generator

crates.io Documentation

Code generation engine for Hemmer infrastructure providers.

Overview

This crate transforms cloud-agnostic service definitions into complete, working Hemmer provider packages. It uses the Tera template engine to generate KCL schemas, Rust code, tests, and documentation.

Features

  • Template-Based Generation: Uses Tera (Jinja2-like) templates for flexible code generation
  • Complete Packages: Generates provider.k, Cargo.toml, lib.rs, resource modules, and README
  • Type Mapping: Converts universal FieldType to Rust and KCL types
  • Custom Filters: Provides kcl_type, rust_type, and capitalize template filters
  • Production Ready: Generated code is clippy-clean and properly formatted

Usage

use hemmer_provider_generator_generator::ProviderGenerator;
use hemmer_provider_generator_common::{ServiceDefinition, Provider};
use std::path::PathBuf;

// Create a service definition (typically from a parser)
let service_def = ServiceDefinition {
    provider: Provider::Aws,
    name: "s3".to_string(),
    sdk_version: "1.0.0".to_string(),
    resources: vec![/* resources */],
};

// Generate provider package
let generator = ProviderGenerator::new();
let output_dir = PathBuf::from("./provider-s3");
generator.generate(&service_def, &output_dir)?;

Generated Structure

provider-{service}/
├── Cargo.toml                    # Package manifest with SDK dependencies
├── README.md                     # Auto-generated documentation
├── provider.k                    # KCL manifest with resource schemas
└── src/
    ├── lib.rs                   # Provider struct and resource accessors
    └── resources/
        ├── mod.rs               # Resource exports
        └── {resource}.rs        # Individual resource implementations

Templates

The crate includes 6 Tera templates:

  • provider.k.tera - KCL schema definitions
  • Cargo.toml.tera - Package manifest
  • lib.rs.tera - Provider struct and accessors
  • resource.rs.tera - Individual resource implementations
  • resources_mod.rs.tera - Resource module exports
  • README.md.tera - Provider documentation

Type Mapping

FieldType Rust Type KCL Type
String String str
Integer i64 int
Float f64 float
Boolean bool bool
DateTime String str
List(T) Vec<T> [T]
Map(K,V) HashMap<K,V> {K:V}

Custom Filters

// In templates:
{{ field.field_type | kcl_type }}    // Convert to KCL type
{{ field.field_type | rust_type }}   // Convert to Rust type
{{ resource.name | capitalize }}     // Capitalize string

Documentation

For detailed API documentation, see docs.rs/hemmer-provider-generator-generator.

License

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Dependencies

~7–11MB
~205K SLoC