Types Reference
Types Reference¶
All types defined by the library, grouped by category. Types are shown using Rust as the canonical representation.
Result Types¶
ParseResult¶
Full parse result returned by POST /asyncapi/parse
| Field | Type | Default | Description |
|---|---|---|---|
spec_version |
String |
— | Spec version |
title |
String |
— | Title |
api_version |
String |
— | Api version |
channels |
Vec<ParsedChannel> |
— | Channels |
operations |
Vec<ParsedOperation> |
— | Operations |
messages |
Vec<ParsedMessage> |
— | Messages |
HandlerResult¶
Opaque type — fields are not directly accessible.
Configuration Types¶
See Configuration Reference for detailed defaults and language-specific representations.
GraphQLRouteConfig¶
Configuration for GraphQL routes
Provides a builder pattern for configuring GraphQL route parameters for the Spikard HTTP server's routing system.
Opaque type — fields are not directly accessible.
SchemaConfig¶
Configuration for GraphQL schema building.
Encapsulates all schema-level configuration options including introspection control, complexity limits, and depth limits.
| Field | Type | Default | Description |
|---|---|---|---|
introspection_enabled |
bool |
true |
Enable introspection queries |
complexity_limit |
Option<usize> |
None |
Maximum query complexity (None = unlimited) |
depth_limit |
Option<usize> |
None |
Maximum query depth (None = unlimited) |
QueryOnlyConfig¶
Configuration for schemas with only Query type
| Field | Type | Default | Description |
|---|---|---|---|
introspection_enabled |
bool |
true |
Enable introspection queries |
complexity_limit |
Option<usize> |
None |
Maximum query complexity (None = unlimited) |
depth_limit |
Option<usize> |
None |
Maximum query depth (None = unlimited) |
QueryMutationConfig¶
Configuration for schemas with Query and Mutation types
| Field | Type | Default | Description |
|---|---|---|---|
introspection_enabled |
bool |
true |
Enable introspection queries |
complexity_limit |
Option<usize> |
None |
Maximum query complexity (None = unlimited) |
depth_limit |
Option<usize> |
None |
Maximum query depth (None = unlimited) |
FullSchemaConfig¶
Configuration for fully-featured schemas with Query, Mutation, and Subscription types
| Field | Type | Default | Description |
|---|---|---|---|
introspection_enabled |
bool |
true |
Enable introspection queries |
complexity_limit |
Option<usize> |
None |
Maximum query complexity (None = unlimited) |
depth_limit |
Option<usize> |
None |
Maximum query depth (None = unlimited) |
BackgroundTaskConfig¶
Configuration for in-process background task execution.
| Field | Type | Default | Description |
|---|---|---|---|
max_queue_size |
usize |
1024 |
Maximum queue size |
max_concurrent_tasks |
usize |
128 |
Maximum concurrent tasks |
drain_timeout_secs |
u64 |
30 |
Drain timeout secs |
CorsConfig¶
CORS configuration for a route
| Field | Type | Default | Description |
|---|---|---|---|
allowed_origins |
Vec<String> |
vec![] |
Allowed origins |
allowed_methods |
Vec<String> |
vec![] |
Allowed methods |
allowed_headers |
Vec<String> |
vec![] |
Allowed headers |
expose_headers |
Vec<String> |
None |
Expose headers |
max_age |
Option<u32> |
None |
Maximum age |
allow_credentials |
Option<bool> |
None |
Allow credentials |
methods_joined_cache |
String |
— | Methods joined cache |
headers_joined_cache |
String |
— | Headers joined cache |
CompressionConfig¶
Compression configuration shared across runtimes
| Field | Type | Default | Description |
|---|---|---|---|
gzip |
bool |
true |
Enable gzip compression |
brotli |
bool |
true |
Enable brotli compression |
min_size |
usize |
— | Minimum response size to compress (bytes) |
quality |
u32 |
— | Compression quality (0-11 for brotli, 0-9 for gzip) |
RateLimitConfig¶
Rate limiting configuration shared across runtimes
| Field | Type | Default | Description |
|---|---|---|---|
per_second |
u64 |
100 |
Requests per second |
burst |
u32 |
200 |
Burst allowance |
ip_based |
bool |
true |
Use IP-based rate limiting |
GrpcConfig¶
Configuration for gRPC support
Controls how the server handles gRPC requests, including compression, timeouts, and protocol settings.
Stream Limits¶
This configuration enforces message-level size limits but delegates concurrent stream limiting to the HTTP/2 transport layer:
-
Message Size Limits: The
max_message_sizefield is enforced per individual message (request or response) in both unary and streaming RPCs. When a single message exceeds this limit, the request is rejected withPAYLOAD_TOO_LARGE(HTTP 413). -
Concurrent Stream Limits: The
max_concurrent_streamsis an advisory configuration passed to the HTTP/2 layer for connection-level stream negotiation. The HTTP/2 transport automatically enforces this limit and returns GOAWAY frames when exceeded. Applications should not rely on custom enforcement of this limit. -
Stream Response Size Limits: The
max_stream_response_bytesfield caps the total encoded bytes emitted across a server-streaming or bidi-streaming response. When the cumulative size exceeds the limit, the stream is terminated withtonic.Status.resource_exhausted. Defaults toNone(unbounded).
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool |
true |
Enable gRPC support |
max_message_size |
usize |
— | Maximum message size in bytes (for both sending and receiving) This limit applies to individual messages in both unary and streaming RPCs. When a single message exceeds this size, the request is rejected with HTTP 413 (Payload Too Large). Default: 4MB (4194304 bytes) Note: This limit does NOT apply to the total response size in streaming RPCs. For multi-message streams, the total response can exceed this limit as long as each individual message stays within the limit. |
enable_compression |
bool |
true |
Enable gzip compression for gRPC messages |
request_timeout |
Option<u64> |
None |
Timeout for gRPC requests in seconds (None = no timeout) |
max_concurrent_streams |
u32 |
— | Maximum number of concurrent streams per connection (HTTP/2 advisory) This value is communicated to HTTP/2 clients as the server's flow control limit. The HTTP/2 transport layer enforces this limit automatically via SETTINGS frames and GOAWAY responses. Applications should NOT implement custom enforcement. Default: 100 streams per connection # Stream Limiting Strategy - Per Connection: This limit applies per HTTP/2 connection, not globally - Transport Enforcement: HTTP/2 handles all stream limiting; applications need not implement custom checks - Streaming Requests: In server streaming or bidi streaming, each logical RPC consumes one stream slot. Message ordering within a stream follows HTTP/2 frame ordering. |
enable_keepalive |
bool |
true |
Enable HTTP/2 keepalive |
keepalive_interval |
u64 |
— | HTTP/2 keepalive interval in seconds |
keepalive_timeout |
u64 |
— | HTTP/2 keepalive timeout in seconds |
max_stream_response_bytes |
Option<usize> |
None |
Total byte cap across an entire streaming response. When Some(n), the streaming adapter aborts the stream with tonic.Status.resource_exhausted once the cumulative encoded message bytes exceed n. The stream yields the error item and then terminates. Per-message cap remains max_message_size. This limit applies to server-streaming and bidirectional-streaming RPCs only; unary RPCs are governed solely by max_message_size. Default: None (unbounded total response size). |
JsonRpcConfig¶
JSON-RPC server configuration
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool |
true |
Enable JSON-RPC endpoint |
endpoint_path |
String |
— | HTTP endpoint path for JSON-RPC requests (default: "/rpc") |
enable_batch |
bool |
— | Enable batch request processing (default: true) |
max_batch_size |
usize |
— | Maximum number of requests in a batch (default: 100) |
OpenApiConfig¶
OpenAPI configuration
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool |
false |
Enable OpenAPI generation (default: false for zero overhead) |
title |
String |
"API" |
API title |
version |
String |
"1.0.0" |
API version |
description |
Option<String> |
None |
API description (supports markdown) |
swagger_ui_path |
String |
— | Path to serve Swagger UI (default: "/docs") |
redoc_path |
String |
— | Path to serve Redoc (default: "/redoc") |
openapi_json_path |
String |
— | Path to serve OpenAPI JSON spec (default: "/openapi.json") |
contact |
Option<ContactInfo> |
None |
Contact information |
license |
Option<LicenseInfo> |
None |
License information |
servers |
Vec<ServerInfo> |
vec![] |
Server definitions |
security_schemes |
HashMap<String, SecuritySchemeInfo> |
HashMap::new() |
Security schemes (auto-detected from middleware if not provided) |
Response¶
HTTP Response with custom status code, headers, and content
| Field | Type | Default | Description |
|---|---|---|---|
content |
Option<serde_json::Value> |
Default::default() |
Response body content |
status_code |
u16 |
— | HTTP status code (defaults to 200) |
headers |
HashMap<String, String> |
HashMap::new() |
Response headers |
JwtConfig¶
JWT authentication configuration
| Field | Type | Default | Description |
|---|---|---|---|
secret |
String |
— | Secret key for JWT verification |
algorithm |
String |
/* serde(default) */ |
Required algorithm (HS256, HS384, HS512, RS256, etc.) |
audience |
Vec<String> |
None |
Required audience claim |
issuer |
Option<String> |
None |
Required issuer claim |
leeway |
u64 |
/* serde(default) */ |
Leeway for expiration checks (seconds) |
ApiKeyConfig¶
API Key authentication configuration
| Field | Type | Default | Description |
|---|---|---|---|
keys |
Vec<String> |
— | Valid API keys |
header_name |
String |
/* serde(default) */ |
Header name to check (e.g., "X-API-Key") |
StaticFilesConfig¶
Static file serving configuration
| Field | Type | Default | Description |
|---|---|---|---|
directory |
String |
— | Directory path to serve |
route_prefix |
String |
— | URL path prefix (e.g., "/static") |
index_file |
bool |
/* serde(default) */ |
Fallback to index.html for directories |
cache_control |
Option<String> |
None |
Cache-Control header value |
ServerConfig¶
Server configuration
| Field | Type | Default | Description |
|---|---|---|---|
host |
String |
"127.0.0.1" |
Host to bind to |
port |
u16 |
8000 |
Port to bind to |
workers |
usize |
1 |
Number of Tokio runtime worker threads used by binding-managed server runtimes |
enable_request_id |
bool |
false |
Enable request ID generation and propagation |
max_body_size |
Option<usize> |
Default::default() |
Maximum request body size in bytes (None = unlimited, not recommended) |
request_timeout |
Option<u64> |
None |
Request timeout in seconds (None = no timeout) |
compression |
Option<CompressionConfig> |
None |
Enable compression middleware |
rate_limit |
Option<RateLimitConfig> |
None |
Enable rate limiting |
jwt_auth |
Option<JwtConfig> |
None |
JWT authentication configuration |
api_key_auth |
Option<ApiKeyConfig> |
None |
API Key authentication configuration |
static_files |
Vec<StaticFilesConfig> |
vec![] |
Static file serving configuration |
graceful_shutdown |
bool |
true |
Enable graceful shutdown on SIGTERM/SIGINT |
shutdown_timeout |
u64 |
30 |
Graceful shutdown timeout (seconds) |
asyncapi |
Option<AsyncApiConfig> |
None |
AsyncAPI HTTP endpoint configuration |
openapi |
Option<OpenApiConfig> |
None |
OpenAPI documentation configuration |
jsonrpc |
Option<JsonRpcConfig> |
None |
JSON-RPC configuration |
grpc |
Option<GrpcConfig> |
None |
gRPC configuration |
lifecycle_hooks |
Option<String> |
None |
Lifecycle hooks for request/response processing |
background_tasks |
BackgroundTaskConfig |
— | Background task executor configuration |
enable_http_trace |
bool |
false |
Enable per-request HTTP tracing (tower-http TraceLayer) |
di_container |
Option<String> |
None |
Dependency injection container (requires 'di' feature) |
App¶
Spikard application builder.
Opaque type — fields are not directly accessible.
AsyncApiConfig¶
AsyncAPI HTTP endpoint configuration
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool |
— | Enable AsyncAPI endpoints (default: false) |
spec |
Option<serde_json::Value> |
Default::default() |
Pre-registered AsyncAPI spec to serve from GET /asyncapi.json |
Metadata Types¶
BackgroundJobMetadata¶
| Field | Type | Default | Description |
|---|---|---|---|
name |
String |
— | The name |
request_id |
Option<String> |
None |
Request id |
Other Types¶
UploadFile¶
Represents an uploaded file from multipart/form-data requests.
This struct provides efficient access to file content with automatic base64 decoding and implements standard I/O traits for compatibility.
| Field | Type | Default | Description |
|---|---|---|---|
filename |
String |
— | Original filename from the client |
content_type |
Option<String> |
None |
MIME type of the uploaded file |
size |
Option<usize> |
None |
Size of the file in bytes |
content |
Vec<u8> |
— | File content (may be base64 encoded) |
content_encoding |
Option<String> |
None |
Content encoding type |
cursor |
String |
— | Internal cursor for Read/Seek operations |
SseEvent¶
An individual SSE event
Represents a single Server-Sent Event to be sent to a connected client. Events can have an optional type, ID, and retry timeout for advanced scenarios.
SSE Format¶
Events are serialized to the following text format:
| Field | Type | Default | Description |
|---|---|---|---|
event_type |
Option<String> |
None |
Event type (optional) |
data |
serde_json::Value |
— | Event data (JSON value) |
id |
Option<String> |
None |
Event ID (optional, for client-side reconnection) |
retry |
Option<u64> |
None |
Retry timeout in milliseconds (optional) |
RouteBuilder¶
Builder for defining a route.
Opaque type — fields are not directly accessible.
IntoHandler¶
Convert user-facing handler functions into the low-level Handler trait.
Opaque type — fields are not directly accessible.
JsonRpcMethodInfo¶
JSON-RPC method metadata for routes that support JSON-RPC
This struct captures the metadata needed to expose HTTP routes as JSON-RPC methods, enabling discovery and documentation of RPC-compatible endpoints.
| Field | Type | Default | Description |
|---|---|---|---|
method_name |
String |
— | The JSON-RPC method name (e.g., "user.create") |
description |
Option<String> |
None |
Optional description of what the method does |
params_schema |
Option<serde_json::Value> |
None |
Optional JSON Schema for method parameters |
result_schema |
Option<serde_json::Value> |
None |
Optional JSON Schema for the result |
deprecated |
bool |
/* serde(default) */ |
Whether this method is deprecated |
tags |
Vec<String> |
/* serde(default) */ |
Tags for categorizing and grouping methods |
ProblemDetails¶
RFC 9457 Problem Details for HTTP APIs
A machine-readable format for specifying errors in HTTP API responses.
Per RFC 9457, all fields are optional. The type field defaults to "about:blank"
if not specified.
Content-Type¶
Responses using this struct should set:
{
"type": "<https://spikard.dev/errors/validation-error",>
"title": "Request Validation Failed",
"status": 422,
"detail": "2 validation errors in request body",
"errors": [...]
}
| Field | Type | Default | Description |
|---|---|---|---|
type_uri |
String |
— | A URI reference that identifies the problem type. Defaults to "about:blank" when absent. Should be a stable, human-readable identifier for the problem type. |
title |
String |
— | A short, human-readable summary of the problem type. Should not change from occurrence to occurrence of the problem. |
status |
u16 |
— | The HTTP status code generated by the origin server. This is advisory; the actual HTTP status code takes precedence. |
detail |
Option<String> |
None |
A human-readable explanation specific to this occurrence of the problem. |
instance |
Option<String> |
None |
A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. |
extensions |
HashMap<String, serde_json::Value> |
— | Extension members - problem-type-specific data. For validation errors, this typically contains an "errors" array. |
ParsedChannel¶
A single channel extracted from an AsyncAPI spec
| Field | Type | Default | Description |
|---|---|---|---|
name |
String |
— | Channel key from the spec (e.g. "chat/messages") |
address |
String |
— | Channel address / path |
messages |
Vec<String> |
— | Message names declared on this channel |
bindings |
Option<serde_json::Value> |
None |
Bindings (ws / http / amqp / …) as raw JSON for forward-compatibility |
ParsedOperation¶
A single operation extracted from an AsyncAPI spec
| Field | Type | Default | Description |
|---|---|---|---|
name |
String |
— | Operation name |
action |
String |
— | Operation action: "send" or "receive" |
channel |
String |
— | Channel reference (resolved to the channel name) |
ParsedMessage¶
A resolved message (name + JSON Schema)
| Field | Type | Default | Description |
|---|---|---|---|
name |
String |
— | Message name |
schema |
Option<serde_json::Value> |
None |
Resolved JSON Schema for the message payload, if available |
ParseRequest¶
Request body for POST /asyncapi/parse
| Field | Type | Default | Description |
|---|---|---|---|
spec |
serde_json::Value |
— | Spec |
ValidationResponse¶
Response body for POST /asyncapi/validate
| Field | Type | Default | Description |
|---|---|---|---|
valid |
bool |
— | Valid |
errors |
Vec<String> |
— | Errors |
ValidateRequest¶
Request body for POST /asyncapi/validate
| Field | Type | Default | Description |
|---|---|---|---|
spec |
serde_json::Value |
— | Spec |
channel |
String |
— | Channel |
message |
String |
— | Message |
payload |
serde_json::Value |
— | Payload |
Handler¶
Handler trait that all language bindings must implement
This trait is completely language-agnostic. Each binding (Python, Node, WASM) implements this trait to bridge their runtime to our HTTP server.
Opaque type — fields are not directly accessible.
ContactInfo¶
Contact information
| Field | Type | Default | Description |
|---|---|---|---|
name |
Option<String> |
None |
Name of the contact person or organisation. |
email |
Option<String> |
None |
Contact email address. |
url |
Option<String> |
None |
URL pointing to the contact information page. |
LicenseInfo¶
License information
| Field | Type | Default | Description |
|---|---|---|---|
name |
String |
— | SPDX license identifier or display name (e.g. "MIT"). |
url |
Option<String> |
None |
URL to the full license text. |
ServerInfo¶
Server information
| Field | Type | Default | Description |
|---|---|---|---|
url |
String |
— | Base URL of the server (e.g. "<https://api.example.com/v1">). |
description |
Option<String> |
None |
Optional human-readable description of the server environment. |
ResponseSnapshot¶
Snapshot of an Axum response used by higher-level language bindings.
| Field | Type | Default | Description |
|---|---|---|---|
status |
u16 |
— | HTTP status code. |
headers |
HashMap<String, String> |
— | Response headers (lowercase keys for predictable lookups). |
body |
Vec<u8> |
— | Response body bytes (decoded for supported encodings). |
TestingSseEvent¶
A single Server-Sent Event.
| Field | Type | Default | Description |
|---|---|---|---|
data |
String |
— | The data field of the event. |
GraphQLSubscriptionSnapshot¶
Snapshot of a GraphQL subscription exchange over WebSocket.
| Field | Type | Default | Description |
|---|---|---|---|
operation_id |
String |
— | Operation id used for the subscription request. |
acknowledged |
bool |
— | Whether the server acknowledged the GraphQL WebSocket connection. |
event |
Option<serde_json::Value> |
None |
First next.payload received for this subscription, if any. |
errors |
Vec<serde_json::Value> |
— | GraphQL protocol errors emitted by the server. |
complete_received |
bool |
— | Whether a complete frame was observed for this operation. |
TestClient¶
Core test client for making HTTP requests to a Spikard application.
This struct wraps axum-test's TestServer and provides a language-agnostic interface for making HTTP requests, sending WebSocket connections, and handling Server-Sent Events. Language bindings wrap this to provide native API surfaces.
Opaque type — fields are not directly accessible.
Request¶
Opaque type — fields are not directly accessible.
RequestData¶
Opaque type — fields are not directly accessible.
Enums¶
Method¶
HTTP method
| Variant | Description |
|---|---|
Get |
Get |
Post |
Post |
Put |
Put |
Patch |
Patch |
Delete |
Delete |
Head |
Head |
Options |
Options |
Connect |
Connect |
Trace |
Trace |
SecuritySchemeInfo¶
Security scheme types
| Variant | Wire value | Description |
|---|---|---|
Http |
http |
Http — Fields: scheme: String, bearer_format: String |
ApiKey |
apiKey |
Api key — Fields: location: String, name: String |
SnapshotError¶
Possible errors while converting an Axum response into a snapshot.
| Variant | Description |
|---|---|
InvalidHeader |
Response header could not be decoded to UTF-8. — Fields: _0: String |
Decompression |
Body decompression failed. — Fields: _0: String |
WebSocketMessage¶
A WebSocket message that can be text or binary.
| Variant | Description |
|---|---|
Text |
A text message. — Fields: _0: String |
Binary |
A binary message. — Fields: _0: Vec<u8> |
Close |
A close message with a numeric close code (RFC 6455) and optional reason text. Common codes: 1000 Normal Closure, 1001 Going Away, 1005 No Status Received, 1006 Abnormal Closure. — Fields: code: u16, reason: String |
Ping |
A ping message. — Fields: _0: Vec<u8> |
Pong |
A pong message. — Fields: _0: Vec<u8> |