7 个版本 (重大变更)
0.7.0 | 2024年4月16日 |
---|---|
0.6.0 | 2024年4月9日 |
0.5.0 | 2024年4月2日 |
0.4.0 | 2024年3月23日 |
0.1.0 | 2024年3月5日 |
#118 in #openapi
每月 30 次下载
用于 3 个 crate(2 个直接使用)
24KB
548 行
Predawn
predawn
是一个类似于 Spring Boot
的 Rust 网页框架。
use predawn::{
app::{run_app, Hooks},
controller,
};
use rudi::Singleton;
struct App;
impl Hooks for App {}
#[tokio::main]
async fn main() {
run_app::<App>().await;
}
#[derive(Clone)]
#[Singleton]
struct Controller;
#[controller]
impl Controller {
#[handler(paths = ["/"], methods = [post])]
async fn hello(&self, name: String) -> String {
format!("Hello {name}")
}
}
特性
- 内置 OpenAPI 支持。
- 自动依赖注入。
- 可编程配置。
更多示例可以在 示例目录 中找到。
更复杂的示例
use std::sync::Arc;
use async_trait::async_trait;
use predawn::{
app::{run_app, Hooks},
controller,
};
use rudi::Singleton;
struct App;
impl Hooks for App {}
#[tokio::main]
async fn main() {
run_app::<App>().await;
}
#[async_trait]
trait Service: Send + Sync {
fn arc(self) -> Arc<dyn Service>
where
Self: Sized + 'static,
{
Arc::new(self)
}
async fn hello(&self) -> String;
}
#[derive(Clone)]
#[Singleton(binds = [Service::arc])]
struct ServiceImpl;
#[async_trait]
impl Service for ServiceImpl {
async fn hello(&self) -> String {
"Hello, World!".to_string()
}
}
#[derive(Clone)]
#[Singleton]
struct Controller {
svc: Arc<dyn Service>,
}
#[controller]
impl Controller {
#[handler(paths = ["/"], methods = [GET])]
async fn hello(&self) -> String {
self.svc.hello().await
}
}
致谢
依赖
~2–3MB
~55K SLoC