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;
38pub mod config;
39mod container;
40mod error;
41mod openapi;
42mod pipeline;
43mod route;
44mod validation;
45
46pub use app::App;
47pub use config::ServerustConfig;
48pub use container::{Container, Injectable};
49pub use error::{ApiError, validation_error_response};
50pub use pipeline::{Guard, GuardCheck, Interceptor, ParseUuidPipe, Pipe, PipePath};
51pub use route::{IntoRoute, Route};
52pub use validation::Json;
53
54/// Extractors tipados expostos pelo framework.
55///
56/// `Json` é a versão validada do serverust (executa `Validate` antes do handler);
57/// os demais são re-exports diretos do axum.
58pub mod extract {
59    pub use crate::validation::Json;
60    pub use axum::extract::{Path, Query, State};
61}
62
63/// Itens internos usados pelas macros geradas. Não fazem parte da API pública estável.
64#[doc(hidden)]
65pub mod __private {
66    pub use axum;
67    pub use http;
68    pub use serde_json;
69    pub use utoipa;
70}