feat: adding axum integration as the server component - #2
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds an initial Axum-based server interface generator (generate.std-http-server) to oapi-codegen-rust, expanding the pipeline to lower OpenAPI paths/operations into a new server IR and then emit an axum router + trait-based handler contract. It also updates tests and documentation to cover and validate the new generator output.
Changes:
- Add server-path lowering (
paths.rs) and IR types (Service/Operation/etc.) to generate an AxumApitrait, response enums, router, and handlers. - Extend emit layer to render both models and server interface, and update CLI/lib entrypoints to generate based on config.
- Rename/refresh “golden” workflow to “generated” outputs and add fixtures/tests for supported + deliberately-unsupported server features.
Reviewed changes
Copilot reviewed 16 out of 37 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Documents std-http-server and the supported/unsupported server-generation slice. |
| Makefile | Renames the refresh target/env var to update-generated / UPDATE_GENERATED. |
| crates/oapi-codegen/Cargo.toml | Adds http dependency and axum dev-dependency for compile-checking generated server output. |
| Cargo.lock | Updates lockfile for newly added dependencies (axum, http, and transitive deps). |
| crates/oapi-codegen/src/config.rs | Updates config docs to reflect implemented Axum server interface generation. |
| crates/oapi-codegen/src/error.rs | Adds UnsupportedOperation error variant for server-generator limitations. |
| crates/oapi-codegen/src/ir.rs | Introduces server IR types (Service, Operation, Param, ResponseCase). |
| crates/oapi-codegen/src/loader.rs | Exposes Spec::paths() for server lowering. |
| crates/oapi-codegen/src/lib.rs | Adds generate / generate_to_file supporting models + server emission based on config. |
| crates/oapi-codegen/src/main.rs | Switches CLI to config-driven generation (models and/or server) and uses new lib API. |
| crates/oapi-codegen/src/schema.rs | Exposes scalar format mapping helpers for reuse by server lowering. |
| crates/oapi-codegen/src/paths.rs | New: lowers OpenAPI paths/operations into server IR (path params, JSON bodies, explicit-status responses). |
| crates/oapi-codegen/src/emit.rs | Adds emission of server interface items (trait, response enums, router, handlers) and shared rendering pipeline. |
| crates/oapi-codegen/tests/coverage.rs | Updates coverage harness to track “generated” outputs and adds server fixture validation (success + rejection). |
| crates/oapi-codegen/tests/generated_compiles.rs | Compile-checks generated outputs (models + server) and adds a small server type-check test. |
| crates/oapi-codegen/tests/fixtures/server_petstore.yaml | New fixture for supported server generation. |
| crates/oapi-codegen/tests/fixtures/server_unsupported_default_response.yaml | New fixture asserting rejection of unsupported default responses. |
| crates/oapi-codegen/tests/generated/allof_merge.rs | New committed generated output for allOf merge fixture. |
| crates/oapi-codegen/tests/generated/anyof_untagged.rs | New committed generated output for anyOf untagged fixture. |
| crates/oapi-codegen/tests/generated/array_types.rs | New committed generated output for array typing fixture. |
| crates/oapi-codegen/tests/generated/ext_x_rust_type.rs | New committed generated output for x-rust-type fixture. |
| crates/oapi-codegen/tests/generated/freeform_any.rs | New committed generated output for free-form schema fixture. |
| crates/oapi-codegen/tests/generated/integer_formats.rs | New committed generated output for integer format mapping fixture. |
| crates/oapi-codegen/tests/generated/map_alias.rs | New committed generated output for map alias fixture. |
| crates/oapi-codegen/tests/generated/metadata_docs.rs | New committed generated output for doc comment emission fixture. |
| crates/oapi-codegen/tests/generated/nullable.rs | New committed generated output for nullable-to-Option fixture. |
| crates/oapi-codegen/tests/generated/number_formats.rs | New committed generated output for number format mapping fixture. |
| crates/oapi-codegen/tests/generated/object_additional_properties.rs | New committed generated output for additionalProperties fixture. |
| crates/oapi-codegen/tests/generated/object_nested_inline.rs | New committed generated output for nested inline object hoisting fixture. |
| crates/oapi-codegen/tests/generated/object_optional_required.rs | New committed generated output for required vs optional field fixture. |
| crates/oapi-codegen/tests/generated/oneof_discriminator.rs | New committed generated output for discriminator + untagged enum fixture. |
| crates/oapi-codegen/tests/generated/oneof_untagged.rs | New committed generated output for oneOf untagged enum fixture. |
| crates/oapi-codegen/tests/generated/primitive_scalars.rs | New committed generated output for primitive scalar mapping fixture. |
| crates/oapi-codegen/tests/generated/ref_local.rs | New committed generated output for local $ref fixture. |
| crates/oapi-codegen/tests/generated/server_petstore.rs | New committed generated server+models output for server petstore fixture. |
| crates/oapi-codegen/tests/generated/string_enum.rs | New committed generated output for string-enum fixture. |
| crates/oapi-codegen/tests/generated/string_formats.rs | New committed generated output for string format mapping fixture. |
Contributor
|
🎉 This PR is included in version 1.0.0-dev.1 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Contributor
|
🎉 This PR is included in version 1.0.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.