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
225 downloads per month
Used in hemmer-provider-generator
130KB
2.5K
SLoC
hemmer-provider-generator-generator
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
FieldTypeto Rust and KCL types - Custom Filters: Provides
kcl_type,rust_type, andcapitalizetemplate 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 definitionsCargo.toml.tera- Package manifestlib.rs.tera- Provider struct and accessorsresource.rs.tera- Individual resource implementationsresources_mod.rs.tera- Resource module exportsREADME.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