Skip to main content

serverust_core/
lib.rs

1//! Core do framework **serverust** — APIs HTTP e AWS Lambda em Rust, com a
2//! ergonomia do FastAPI e a arquitetura do NestJS.
3//!
4//! Este crate concentra as peças que você usa em todo handler:
5//!
6//! - [`App`] — builder principal: acumula rotas, registra services no
7//!   [`Container`], expõe `/openapi.json`, `/docs` e `/redoc`.
8//! - [`Route`] / [`IntoRoute`] — tipo emitido pelas macros `#[get]`/`#[post]`/etc
9//!   (definidas em `serverust-macros`).
10//! - [`extract::Json`] — extractor validante: roda `validator::Validate` antes
11//!   do handler e responde HTTP 422 padronizado em falha.
12//! - [`ApiError`] / [`validation_error_response`] — payload de erro JSON
13//!   consistente. Use com `#[derive(ApiError)]` em enums de domínio.
14//! - [`Guard`] / [`Pipe`] / [`Interceptor`] — primitivas de pipeline.
15//! - [`ServerustConfig`] — config typed lida de `serverust.toml` via figment.
16//!
17//! Exemplo mínimo servindo HTTP local. Em produção, combine com o crate
18//! `serverust-lambda` (trait `AppRuntime`) para um `.run()` que detecta entre
19//! Lambda e HTTP automaticamente:
20//!
21//! ```no_run
22//! use serverust_core::App;
23//! use serverust_macros::get;
24//!
25//! #[get("/")]
26//! async fn hello() -> &'static str { "hello" }
27//!
28//! #[tokio::main]
29//! async fn main() -> std::io::Result<()> {
30//!     App::new().route(hello).run_http("127.0.0.1:3000").await
31//! }
32//! ```
33//!
34//! Mais exemplos e tutorial completo em
35//! <https://github.com/JaimeJunr/serverust/blob/main/docs/guides/lambda-tutorial.md>.
36
37mod app;
38mod auth;
39pub mod config;
40mod container;
41mod error;
42pub mod events;
43mod openapi;
44mod pipeline;
45mod route;
46mod validation;
47
48pub use app::App;
49pub use auth::{
50    AllowUnannotated, AuthEnabled, AuthFailure, AuthGate, AuthGateFuture, AuthGateService,
51    Authenticated, AuthzFacts,
52};
53pub use config::ServerustConfig;
54pub use container::{Container, Injectable};
55pub use error::{ApiError, validation_error_response};
56pub use events::{EventDispatcher, EventError, EventHandler};
57pub use pipeline::{Guard, GuardCheck, Interceptor, ParseUuidPipe, Pipe, PipePath};
58pub use route::{IntoRoute, Route};
59pub use validation::Json;
60
61/// Extractors tipados expostos pelo framework.
62///
63/// `Json` é a versão validada do serverust (executa `Validate` antes do handler);
64/// os demais são re-exports diretos do axum.
65pub mod extract {
66    pub use crate::validation::Json;
67    pub use axum::extract::{Path, Query, State};
68}
69
70/// Itens internos usados pelas macros geradas. Não fazem parte da API pública estável.
71#[doc(hidden)]
72pub mod __private {
73    pub use crate::auth::check_authz;
74    pub use axum;
75    pub use http;
76    pub use serde_json;
77    pub use utoipa;
78}