Skip to main content

sova_core/
lib.rs

1//! Sova core — App, Router, Request, Response, middleware, server.
2//!
3//! # Request path
4//!
5//! `accept` → `server/conn` → `to_sova_request` → `CompiledRouter::dispatch`
6//! → root middleware → matchit → route middleware → handler → [`IntoResponse`]
7//! → hyper response.
8//!
9//! # Public surface
10//!
11//! This crate root exports names used by applications. Plugin authors and
12//! advanced integrations use [`extend`].
13//!
14//! Product docs: <https://s00d.github.io/sova/> (VitePress guide `/guide/concepts`).
15
16mod request_id;
17mod app;
18mod config;
19mod error;
20mod handler;
21mod human;
22mod limits;
23mod middleware;
24mod plugin;
25mod raw;
26mod request;
27mod response;
28mod route_value;
29mod router;
30mod server;
31mod service;
32mod share;
33mod state;
34mod tracing_init;
35mod upgrade;
36mod test_client;
37#[cfg(feature = "tls")]
38mod tls;
39
40// Application-facing API (~16–18 names).
41pub use app::{App, BoundApp, CheckKind, CheckResult, Http, Server};
42pub use config::ConfigDoc;
43pub use error::{Error, IntoResponse, Result};
44pub use middleware::{logger, with_state, Next};
45pub use plugin::{
46    check_plugin_sdk, InstalledPlugin, Plugin, PluginMeta, PluginSdkVersion, SdkCompat,
47    PLUGIN_SDK_VERSION,
48};
49pub use request::{FormData, Request, Upload, UploadRules};
50pub use request_id::{ensure_request_id, request_id, RequestId};
51pub use response::{referer_or, Html, Json, NoContent, Redirect, Response, Text};
52pub use router::Router;
53pub use server::{ClientAddr, RateLimitIdentity};
54pub use service::{BackgroundService, Shutdown};
55pub use share::{Cell, Slot};
56pub use state::{MatchedRoute, MatchedRouteCapture};
57pub use tracing_init::{
58    parse_log_rotate, set_log_event_hook, LogConfig, LogEventHook, LogRecord, LogRotate,
59};
60#[cfg(any(test, feature = "testing"))]
61pub use service::{shutdown_channel, ShutdownSender};
62pub use upgrade::{OnUpgrade, UpgradePermit};
63pub use test_client::{ClientRequest, RequestHook, ResponseAssert, TestClient};
64#[cfg(feature = "tls")]
65pub use tls::Tls;
66
67/// Extension / plugin-author API (handlers, bodies, route introspection, …).
68///
69/// Prefer this module when writing plugins: middleware helpers (`with_leaked`,
70/// `named`), [`PluginMeta`](crate::PluginMeta) / [`PLUGIN_SDK_VERSION`](crate::PLUGIN_SDK_VERSION),
71/// and route introspection types. Application `main` usually imports from the crate root
72/// (or the `sova` facade) instead.
73pub mod extend {
74    pub use crate::app::Bind;
75    pub use crate::plugin::{
76        check_plugin_sdk, InstalledPlugin, PluginMeta, PluginSdkVersion, SdkCompat,
77        PLUGIN_SDK_VERSION,
78    };
79    pub use crate::handler::{
80        BoxFuture, ErrorResponse, FallibleHandler, Handler, IntoHandler,
81    };
82    pub use crate::middleware::{
83        named, with_leaked, IntoMiddleware, IntoMwEntry, Middleware, MwEntry,
84    };
85    pub use crate::raw::{IntoRawHandler, RawHandler};
86    pub use crate::request::{FormData, RequestBuilder, Upload, UploadRules};
87    pub use crate::request_id::{ensure_request_id, request_id, RequestId};
88    pub use crate::response::{Body, BoxError, HttpBody, ResponseBody};
89    pub use crate::human::{parse_bytes, parse_duration};
90    pub use crate::limits::{tighten_deadline, Deadline, MaxBody, RequestTimeout};
91    pub use crate::route_value::{BuildCtx, MetaMap, Needs, RouteValue};
92    pub use crate::router::{
93        join_paths, normalize_path, to_brace_path, RouteEntry, RouteTable,
94    };
95    pub use crate::service::wait_shutdown;
96    pub use crate::share::{Cell, Slot};
97    pub use crate::state::{
98        Extensions, MatchedMeta, MatchedMetaCapture, MatchedRoute, MatchedRouteCapture, StateMap,
99        TypeMap,
100    };
101    pub use crate::tracing_init::{
102        ensure_tracing, parse_log_rotate, set_log_event_hook, LogConfig, LogEventHook, LogRecord,
103        LogRotate,
104    };
105}