Crate armature_openapi

Crate armature_openapi 

Source
Expand description

OpenAPI 3.0 specification generation and Swagger UI integration for Armature

This crate provides tools for generating OpenAPI specifications and serving interactive API documentation via Swagger UI.

§Features

  • 📝 Programmatic API - Build OpenAPI specs with fluent builder
  • 📊 Swagger UI - Interactive API documentation
  • 📤 JSON/YAML Export - Multiple export formats
  • 🔒 Type-Safe - Strongly typed OpenAPI 3.0 specification
  • 🔐 Auth Schemes - Bearer, API Key, OAuth2, OpenID
  • 📋 Schema Support - Request/response schemas

§Quick Start - Basic API Spec

use armature_openapi::OpenApiBuilder;

let spec = OpenApiBuilder::new("My API", "1.0.0")
    .description("A wonderful API")
    .server("http://localhost:3000", None)
    .build();

assert_eq!(spec.info.title, "My API");
assert_eq!(spec.info.version, "1.0.0");
assert_eq!(spec.servers.len(), 1);

§Adding Authentication

use armature_openapi::{OpenApiBuilder, ApiKeyLocation};

let spec = OpenApiBuilder::new("Secure API", "1.0.0")
    .add_bearer_auth("bearer")
    .add_api_key_auth("api_key", "X-API-Key", ApiKeyLocation::Header)
    .build();

assert!(spec.components.is_some());
let components = spec.components.unwrap();
assert!(components.security_schemes.contains_key("bearer"));
assert!(components.security_schemes.contains_key("api_key"));

§Adding Paths and Operations

use armature_openapi::{OpenApiBuilder, PathItem, Operation, Response};
use std::collections::HashMap;

let mut get_operation = Operation::default();
get_operation.summary = Some("Get user by ID".to_string());
get_operation.operation_id = Some("getUserById".to_string());

let mut responses = HashMap::new();
responses.insert("200".to_string(), Response {
    description: "Successful response".to_string(),
    content: None,
});
get_operation.responses = responses;

let mut path_item = PathItem::default();
path_item.get = Some(get_operation);

let mut spec = OpenApiBuilder::new("User API", "1.0.0").build();
spec.paths.insert("/users/{id}".to_string(), path_item);

assert!(spec.paths.contains_key("/users/{id}"));
assert!(spec.paths.get("/users/{id}").unwrap().get.is_some());

§Swagger UI Configuration

use armature_openapi::{OpenApiBuilder, SwaggerConfig};

let spec = OpenApiBuilder::new("My API", "1.0.0")
    .description("API with Swagger UI")
    .build();

let swagger_config = SwaggerConfig::new("/api-docs", spec)
    .with_title("My API Documentation");

// Configuration ready
assert_eq!(swagger_config.path, "/api-docs");
assert_eq!(swagger_config.title, "My API Documentation");

§Adding Multiple Servers

use armature_openapi::OpenApiBuilder;

let spec = OpenApiBuilder::new("Multi-Env API", "1.0.0")
    .server("https://api.production.com", Some("Production server".to_string()))
    .server("https://api.staging.com", Some("Staging server".to_string()))
    .server("http://localhost:3000", Some("Local development".to_string()));

let built_spec = spec.build();

assert_eq!(built_spec.servers.len(), 3);
assert_eq!(built_spec.servers[0].url, "https://api.production.com");
assert_eq!(built_spec.servers[1].url, "https://api.staging.com");
assert_eq!(built_spec.servers[2].url, "http://localhost:3000");
assert_eq!(built_spec.servers[0].description, Some("Production server".to_string()));

Re-exports§

pub use builder::*;
pub use playground::*;
pub use spec::*;
pub use swagger::*;

Modules§

builder
Builder for creating OpenAPI specifications programmatically
playground
API Playground - Interactive API Testing UI
spec
OpenAPI 3.0 specification types
swagger
Swagger UI integration