OpenAPI Model Generator
A Rust library and CLI tool for generating Rust models from OpenAPI specifications. This utility automatically creates Rust structures based on schemas from OpenAPI (Swagger) documentation.
Features
- OpenAPI 3.0 specification support with full schema parsing
- YAML and JSON format support for input specifications
- Automatic generation of Rust structures with Serde attributes
- Schema Composition Support: Complete implementation of OpenAPI composition patterns:
allOf
- Combines multiple schemas into a single structoneOf
/anyOf
- Generates tagged union enums with proper serde configuration
- Advanced Type Support:
- UUID fields (
format: uuid
→Uuid
type) - DateTime fields (
format: date-time
→DateTime<Utc>
type) - Nested types and arrays with proper generic handling
- UUID fields (
- Smart Code Generation:
- Required vs optional field detection (
Option<T>
for nullable fields) - PascalCase naming for generated request/response models
- Reference resolution across schema definitions
- Required vs optional field detection (
- Clean Code Output: Properly formatted Rust code with comprehensive serde annotations
Installation
As a CLI tool
As a library dependency
Add to your Cargo.toml
:
[]
= "0.2.0"
Usage
Command Line Interface
Parameters
-i, --input
- Path to the OpenAPI specification file (YAML or JSON)-o, --output
- Path to the output directory (default: ./generated)
Library Usage
use ;
use fs;
// Parse OpenAPI specification
let openapi_spec = read_to_string?;
let openapi: OpenAPI = from_str?;
// Generate models
let = parse_openapi?;
let generated_code = generate_models?;
// Write to file
write?;
Example
Source OpenAPI schema:
components:
schemas:
User:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
email:
type: string
age:
type: integer
is_active:
type: boolean
required:
- id
- name
- email
Generated Rust code:
use ;
use Uuid;
use ;
Development
Dependencies
- Rust 1.70 or higher
- Cargo
Building
Running Tests
Examples
The generator supports complex OpenAPI patterns including schema composition:
- UUID and DateTime handling - Automatic type conversion for formatted strings
- Schema composition with allOf - Inheritance and field merging
- Tagged unions with oneOf/anyOf - Automatic enum generation with proper serde tags
Changelog
See CHANGELOG.md for detailed information about releases and changes.
License
MIT