RUEST
Rust + NestJS — NestJS DX, performance Rust, simplicité Axum.
Framework backend Rust inspiré de NestJS et Spring Boot — voir BRD&PRD.md.
| Document | Contenu |
|---|---|
| docs/PRINCIPES.md | Modulaire · typé · sécurisé · fonctionnel (piliers du framework) |
| ARCHITECTURE.md | Performance, routing/DI compile-time |
| docs/DX.md | CLI ruest, prelude, conventions, roadmap DX |
| docs/SECURITY.md | JWT, guards, with_jwt_auth |
| docs/RUESTDB.md | Schema DSL, migrations, client généré |
| docs/HTTP_FEATURES.md | Features Axum activées |
| docs/PERFORMANCE.md | Benchmarks, wrk, comparaison Axum/NestJS |
Capacités HTTP (Axum)
Toutes les features Axum 0.7 sont activées : HTTP/1, HTTP/2, WebSocket, multipart, form, query, MatchedPath, OriginalUri, tracing des extracteurs, etc.
use *;
// Json, Form, Query, Path, AppResult, Multipart, WebSocketUpgrade, …
Piliers du framework
| Pilier | En bref | Doc |
|---|---|---|
| Modulaire | #[module] + imports, un crate par responsabilité |
PRINCIPES.md |
| Typé | Inject<T>, AppResult, macros compile-time, RuestDB généré |
PRINCIPES.md |
| Sécurisé | JWT, guards, validation, SQL paramétré (SQLx) | SECURITY.md |
| Fonctionnel | Bootstrap → routes → tests d’intégration sur chaque brique | PRINCIPES.md |
| Performant | Pas de dyn par route, DI monomorphisée |
ARCHITECTURE.md |
| DX | prelude, ruest_err!, CLI ruest |
DX.md |
Phase 1 (MVP) ✅
Modules, DI, controllers, routing compile-time, validation, config, logger, CLI ruest, AppResult, exemples basic-api et shop-api.
Installation (crates.io)
Après publication sur crates.io :
Le nom
ruestsur crates.io est déjà utilisé par un autre projet ; le framework est publié sousruest-framework(même APIruest::dans le code).
Guide de publication pour les mainteneurs : docs/PUBLISHING.md.
Démarrage (monorepo)
| Exemple | Port | Description |
|---|---|---|
| basic-api | 3000 | API minimale |
| shop-api | 3001 | Boutique : dto, entities, repository, ruest_err! |
Exemple (aligné sur basic-api)
use *;
;
// Module racine (shop-api, basic-api) — pas besoin de relister controllers/services :
;
async
Erreurs métier dans les handlers :
return Err;
Sécurité JWT
bootstrap_app?
.with_jwt_auth? // ou SecurityConfig::from_env()?
.port
.listen
.await?;
Voir docs/SECURITY.md — guards #[guard(roles = ["admin"])], extracteur AuthUser, routes publiques /auth/login, etc.
Structure du framework
ruest/ # crate unique `ruest` (modules internes : core, di, http, …)
├── src/core, di, http, security, …
├── macros/ # ruest-macros (proc-macros, dépendance du crate ruest)
└── cli/ # ruest-cli → binaire `ruest`
ruest-db/ # RuestDB — `cargo add ruest-db`
Sur crates.io : ruest + ruest-macros (transitif) + ruest-db (optionnel) + ruest-cli (install).
## Structure d’une app (générée par `ruest new`)
```text
src/
├── main.rs
├── config/
├── common/
└── modules/
└── users/
├── dto/
├── entities/
├── users.controller.rs
├── users.service.rs
├── users.repository.rs
└── users.module.rs
CLI ruest
Roadmap
| Phase | Contenu |
|---|---|
| 1 | MVP compile-time routing + DI typée + CLI ✅ |
| 2 | JWT/guards ✅, RuestDB (Prisma-like) ✅, OpenAPI, extracteurs #[routes] |
| 3 | microservices, queues, cache, observabilité |
Licence
MIT