Module router

Module router 

Source
Expand description

Protocol-agnostic request routing for REST, GraphQL, and gRPC.

Write handlers once, expose them via any protocol:

§Example

use allframe_core::router::{Router, RestAdapter, GraphQLAdapter, GrpcAdapter};

let mut router = Router::new();
router.register("get_user", || async { r#"{"id": 1}"#.to_string() });

// Same handler, three protocols!
let mut rest = RestAdapter::new();
rest.route("GET", "/users/:id", "get_user");

let mut graphql = GraphQLAdapter::new();
graphql.query("user", "get_user");

let mut grpc = GrpcAdapter::new();
grpc.unary("UserService", "GetUser", "get_user");

Also includes documentation generators:

  • scalar_html - Scalar UI for REST APIs
  • graphiql_html - GraphiQL playground for GraphQL
  • grpc_explorer_html - gRPC Explorer

§Protocol-Agnostic Router

Write handlers once, expose them via REST, GraphQL, and gRPC.

This is AllFrame’s core differentiator - the same handler can serve multiple protocols without code changes.

§Quick Start

use allframe_core::router::{Router, RestAdapter, GraphQLAdapter, GrpcAdapter};

// Create router and register handlers
let mut router = Router::new();
router.register("get_user", || async {
    r#"{"id": 42, "name": "Alice"}"#.to_string()
});

// Expose via REST
let mut rest = RestAdapter::new();
rest.route("GET", "/users/:id", "get_user");

// Expose via GraphQL
let mut graphql = GraphQLAdapter::new();
graphql.query("user", "get_user");

// Expose via gRPC
let mut grpc = GrpcAdapter::new();
grpc.unary("UserService", "GetUser", "get_user");

§Key Types

  • Router - Central handler registry
  • RestAdapter - REST protocol adapter
  • GraphQLAdapter - GraphQL protocol adapter
  • GrpcAdapter - gRPC protocol adapter
  • ProtocolAdapter - Trait for custom protocol adapters

§API Documentation

Generate beautiful API documentation automatically:

  • scalar_html - Scalar UI for REST APIs (<50KB)
  • graphiql_html - GraphiQL playground for GraphQL
  • grpc_explorer_html - gRPC Explorer for gRPC services
  • OpenApiGenerator - OpenAPI 3.1 spec generation

§Configuration-Driven Protocol Selection

Use TOML configuration to select protocols without code changes:

[server]
protocols = ["rest", "graphql", "grpc"]

[server.rest]
port = 8080

[server.graphql]
port = 8081

Modules§

adapter
Protocol adapter trait for supporting multiple protocols
builder
Route builder for fluent route configuration
config
Configuration-driven protocol selection
contract
Contract Testing Support
docs
Documentation serving helpers
graphiql
GraphiQL Playground Integration
graphql
GraphQL protocol adapter
grpc
gRPC protocol adapter
grpc_explorer
gRPC Service Explorer Integration
handler
Handler trait and implementations for protocol-agnostic request handling
metadata
Route metadata for documentation generation
method
HTTP method types for type-safe routing
openapi
OpenAPI 3.1 specification generation
rest
REST/HTTP protocol adapter
scalar
Scalar UI integration for interactive OpenAPI documentation.
schema
JSON Schema generation for OpenAPI documentation

Structs§

ContractTestConfig
Contract testing configuration
ContractTestResult
Contract test result for a single route
ContractTestResults
Collection of contract test results
ContractTester
Contract tester for API routes
DocsConfig
Documentation configuration
GraphQLAdapter
GraphQL adapter for GraphQL queries and mutations
GraphQLConfig
GraphQL protocol configuration
GraphQLOperation
GraphQL operation definition
GraphiQLConfig
GraphiQL playground configuration
GrpcAdapter
gRPC adapter for gRPC services and RPCs
GrpcConfig
gRPC protocol configuration
GrpcExplorerConfig
gRPC Explorer configuration
GrpcMethod
gRPC service method definition
GrpcRequest
gRPC request structure
HandlerFn
Wrapper for function-based handlers with no arguments
OpenApiGenerator
OpenAPI specification generator
OpenApiServer
OpenAPI server configuration
RestAdapter
REST adapter for HTTP requests
RestConfig
REST protocol configuration
RestRequest
Simplified HTTP request representation
RestResponse
Simplified HTTP response representation
RestRoute
REST route definition
RouteBuilder
Builder for configuring a route with metadata
RouteMetadata
Metadata about a registered route
Router
Router manages handler registration and protocol adapters
RouterConfig
Router configuration with protocol selection
ScalarConfig
Configuration for Scalar UI
ServerConfig
Server configuration

Enums§

GraphiQLTheme
GraphiQL theme options
GrpcExplorerTheme
gRPC Explorer theme options
GrpcMethodType
gRPC method type (streaming mode)
GrpcStatus
gRPC status codes
Method
HTTP method for REST routes
OperationType
GraphQL operation type
ScalarLayout
Scalar UI layout options
ScalarTheme
Scalar UI theme options

Traits§

ContractTestable
Helper trait for generating contract tests
Handler
Handler trait for protocol-agnostic request handling
ProtocolAdapter
Protocol adapter trait
ToJsonSchema
Trait for types that can be converted to JSON Schema

Functions§

graphiql_html
Generate GraphiQL playground HTML
grpc_explorer_html
Generate gRPC Explorer HTML
scalar_html
Generate Scalar HTML page