| Crates.io | hemmer-provider-generator |
| lib.rs | hemmer-provider-generator |
| version | 0.4.2 |
| created_at | 2025-10-29 19:05:23.297938+00 |
| updated_at | 2026-01-19 03:46:01.543529+00 |
| description | Automatically generate Hemmer infrastructure providers from cloud SDK specifications |
| homepage | https://github.com/hemmer-io/hemmer-provider-generator |
| repository | https://github.com/hemmer-io/hemmer-provider-generator |
| max_upload_size | |
| id | 1907209 |
| size | 96,978 |
Automatically generate Hemmer infrastructure providers from cloud SDK specifications.
Transform any cloud provider's official SDK specification into a complete, working Hemmer provider packageโno manual coding required.
All Platforms:
cargo install hemmer-provider-generator
Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/hemmer-io/hemmer-provider-generator/main/install.sh | sh
Windows (PowerShell):
irm https://raw.githubusercontent.com/hemmer-io/hemmer-provider-generator/main/install.ps1 | iex
All Platforms:
cargo install --git https://github.com/hemmer-io/hemmer-provider-generator.git
Linux/macOS:
# Clone the repository
git clone https://github.com/hemmer-io/hemmer-provider-generator.git
cd hemmer-provider-generator
# Build and install
cargo install --path crates/cli
# Or just build
cargo build --release
./target/release/hemmer-provider-generator --help
Windows (PowerShell):
# Clone the repository
git clone https://github.com/hemmer-io/hemmer-provider-generator.git
cd hemmer-provider-generator
# Build and install
cargo install --path crates/cli
# Or just build
cargo build --release
.\target\release\hemmer-provider-generator.exe --help
# Auto-detect format
hemmer-provider-generator parse --spec storage-v1.json -v
# Explicit format
hemmer-provider-generator parse \
--spec service.pb \
--format protobuf \
--service myservice
Output: Service definition summary with resource count and CRUD operations
# Generate from GCP Discovery document
hemmer-provider-generator generate \
--spec storage-v1.json \
--service storage \
--output ./providers/gcp-storage
# Generate from AWS Smithy spec
hemmer-provider-generator generate \
--spec s3-model.json \
--format smithy \
--service s3 \
--output ./providers/aws-s3
# Generate from Kubernetes OpenAPI spec
hemmer-provider-generator generate \
--spec kubernetes-api.json \
--service kubernetes \
--output ./providers/k8s
Output: Complete provider package with provider.k, Cargo.toml, and Rust code
Generate a single provider package with multiple cloud services:
Option A: Explicit Spec List
hemmer-provider-generator generate-unified \
--provider aws \
--specs s3-model.json,dynamodb-model.json,lambda-model.json \
--service-names s3,dynamodb,lambda \
--output ./provider-aws
Option B: Directory Scanning (Recommended)
# Recursively scans directory for all spec files
hemmer-provider-generator generate-unified \
--provider aws \
--spec-dir /path/to/aws-sdk-models/models/ \
--filter s3,dynamodb,lambda \
--output ./provider-aws \
-v
Key Features:
--filter flag to select specific services by nameReal-World Examples:
# Generate complete AWS provider (all services)
hemmer-provider-generator generate-unified \
--provider aws \
--spec-dir ~/aws-sdk-models/models/ \
--output ./provider-aws
# Generate filtered GCP provider (compute + storage + bigquery)
hemmer-provider-generator generate-unified \
--provider gcp \
--spec-dir ~/google-api-go-client/ \
--filter compute,storage,bigquery \
--output ./provider-gcp
# Generate Kubernetes provider (apps + core APIs)
hemmer-provider-generator generate-unified \
--provider kubernetes \
--spec-dir ~/kubernetes/api/openapi-spec/v3/ \
--filter apps,core \
--output ./provider-k8s
| Format | Cloud Provider(s) | Source Repositories | Status |
|---|---|---|---|
| Smithy | AWS | aws/api-models-aws (406 services) | โ Tested |
| OpenAPI 3.0 | Kubernetes, Azure | kubernetes/kubernetes | โ Tested |
| Discovery | Google Cloud | googleapis/google-api-go-client (436 resources) | โ Tested |
| Protobuf | gRPC Services | Compiled .proto files (FileDescriptorSet) | โ Supported |
AWS (Smithy)
git clone https://github.com/aws/api-models-aws.git
cd api-models-aws/models
# Contains 406 service specs (S3, DynamoDB, Lambda, etc.)
Google Cloud (Discovery)
git clone https://github.com/googleapis/google-api-go-client.git
cd google-api-go-client
# Contains 436 resources across all GCP services
Kubernetes (OpenAPI)
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes/api/openapi-spec/v3
# Contains OpenAPI specs for all K8s APIs
Protobuf (gRPC)
# Compile .proto files to FileDescriptorSet
protoc --descriptor_set_out=service.pb \
--include_imports \
service.proto
Spec File โ Auto-Detect Format โ Parse โ ServiceDefinition IR โ Generate โ Provider Package
Cloud-Agnostic Design: All parsers output the same intermediate representation (ServiceDefinition), making the generator completely cloud-agnostic.
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
provider.k:
schema StorageProvider:
schema Bucket:
name: str
location: str?
storage_class: str?
src/resources/bucket.rs:
pub struct Bucket<'a> {
provider: &'a crate::StorageProvider,
}
impl<'a> Bucket<'a> {
pub async fn create(&self, name: String, ...) -> Result<String> { }
pub async fn read(&self, id: &str) -> Result<()> { }
pub async fn update(&self, id: &str, ...) -> Result<()> { }
pub async fn delete(&self, id: &str) -> Result<()> { }
}
# Clone AWS SDK specs
git clone --depth 1 https://github.com/aws/api-models-aws.git /tmp/aws-sdk
# Generate unified AWS provider with specific services
hemmer-provider-generator generate-unified \
--provider aws \
--spec-dir /tmp/aws-sdk/models/ \
--filter s3,dynamodb,lambda,ec2,rds,sqs,sns \
--output ./provider-aws \
-v
# Result: Single provider-aws package with 7 services
# Clone Google API specs
git clone --depth 1 https://github.com/googleapis/google-api-go-client.git /tmp/gcp-api
# Generate unified GCP provider
hemmer-provider-generator generate-unified \
--provider gcp \
--spec-dir /tmp/gcp-api/ \
--filter storage,compute,bigquery \
--output ./provider-gcp \
-v
# Result: 18 services matched, 436 resources parsed
# Clone Kubernetes specs
git clone --depth 1 https://github.com/kubernetes/kubernetes.git /tmp/k8s
# Generate unified Kubernetes provider
hemmer-provider-generator generate-unified \
--provider kubernetes \
--spec-dir /tmp/k8s/api/openapi-spec/v3/ \
--filter apps,core \
--output ./provider-k8s \
-v
# Result: 2 services, 9 resources
# Download single Smithy spec
curl -o s3.json https://raw.githubusercontent.com/aws/api-models-aws/main/models/s3.json
# Generate single-service provider
hemmer-provider-generator generate \
--spec s3.json \
--format smithy \
--service s3 \
--output ./providers/aws-s3
# Result: provider-s3 package with 38 resources
# Build all crates
cargo build --workspace
# Run tests
cargo test --workspace --all-features
# Run clippy
cargo clippy --workspace -- -D warnings
# Format code
cargo fmt --all
# All tests
cargo test --workspace
# Specific parser
cargo test --test smithy_parser_test
cargo test --test openapi_parser_test
cargo test --test discovery_parser_test
cargo test --test protobuf_parser_test
# With output
cargo test -- --nocapture
This is a Cargo workspace with 4 crates:
common/ - Shared types (ServiceDefinition IR, FieldType, errors)parser/ - Spec format parsers (Smithy, OpenAPI, Discovery, Protobuf)generator/ - Code generation engine (Tera templates)cli/ - Command-line interface.json and .pb files--filter patternsThe CLI automatically detects spec format from:
.pb โ Protobuf, .json โ Parse contentsmithy-model.json, storage-discovery.json, *openapi*.json"smithy" + "shapes" โ Smithy"openapi" + "paths" โ OpenAPI"discoveryVersion" + "resources" โ DiscoveryWhen using --filter, service names are matched against spec filenames:
--filter s3 matches: s3.json, s3-2006-03-01.json, s3control.json--filter storage matches: storage.json, storage-v1-api.json, storagetransfer.json--filter s3,dynamodb,lambda matches any of the threeLicensed under the Apache License, Version 2.0. See LICENSE for details.
See CONTRIBUTING.md for contribution guidelines.
For development context and architecture details, see CLAUDE.md.
Production Ready โ
All 6 planned phases are complete:
| Feature | Status | Notes |
|---|---|---|
| Single-service generation | โ Complete | Fully tested |
| Smithy parser | โ Complete | 406 AWS services |
| OpenAPI parser | โ Complete | Kubernetes, Azure |
| Discovery parser | โ Complete | 436 GCP resources |
| Protobuf parser | โ Complete | gRPC services |
| Directory scanning | โ Complete | Recursive discovery |
| Service filtering | โ Complete | Pattern matching |
| Multi-service parsing | โ Complete | Parse & aggregate multiple services |
| Multi-service generation | โ Complete | Full code generation for unified providers |
| Cross-platform install | โ Complete | Linux, macOS, Windows |
Tested with real SDK repositories:
Version: 0.4.1 Last Updated: 2026-01-18