blazingly-native 0.1.1

Native Compio HTTP/1 adapter for Blazingly, with optional rustls TLS and an experimental HTTP/2 path
Documentation

blazingly-native

Native Compio-based HTTP/1 server adapter for the Blazingly framework, with optional rustls TLS (tls feature) and an experimental HTTP/2 path (http2 feature).

The adapter deliberately owns every socket-runtime and wire-protocol dependency, so the operation graph, router, DI, and documentation crates stay runtime-neutral; Tokio, Hyper, and Axum are not in this crate's tree. Parsing and framing come from blazingly-wire, sockets and completion I/O from Compio. Server serves one compiled app; MulticoreServer runs thread-per-core with one non-Send app per worker; ServerLimits enforces header, body, chunk, pipeline, and socket-deadline limits before an operation is dispatched; shutdown_channel and termination_channel drive graceful drain. The crate is usable without the blazingly facade: anything that produces an ExecutableApp — the facade's macros, or explicit construction as below — can be served. The facade gates this adapter behind its non-default native feature and exposes it as blazingly::native.

[dependencies]
blazingly-core = "0.1"
blazingly-executor = "0.1"
blazingly-native = "0.1"
use blazingly_core::{HttpMethod, OperationDescriptor, ResponseDescriptor, TypeDescriptor};
use blazingly_executor::{ExecutableApp, ExecutableOperation, ExecutionOutcome, OperationFuture};
use blazingly_native::Server;

fn health() -> ExecutableOperation {
    let descriptor = OperationDescriptor::new(
        HttpMethod::Get,
        "/health",
        "app.health",
        "Reports liveness",
        None,
        vec![ResponseDescriptor::success(
            200,
            Some(TypeDescriptor::new("Health")),
        )],
    )
    .expect("operation id is valid");
    ExecutableOperation::typed(descriptor, |_input| {
        Ok(Box::pin(async {
            ExecutionOutcome::Success {
                status: 200,
                headers: Vec::new(),
                body: Some(b"\"ok\"".to_vec()),
                background: Vec::new(),
            }
        }) as OperationFuture)
    })
}

fn main() -> std::io::Result<()> {
    let app = ExecutableApp::new([health()]).expect("operation graph compiles");
    Server::new(app).serve("127.0.0.1:3000")
}

Links