Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zihantype/predawn

Predawn is a Rust web framework like Spring Boot -- Predawn 是一个类似 Spring Boot 的 Rust web 框架
https://github.com/zihantype/predawn

framework rust spring-boot web

Last synced: 6 days ago
JSON representation

Predawn is a Rust web framework like Spring Boot -- Predawn 是一个类似 Spring Boot 的 Rust web 框架

Awesome Lists containing this project

README

        

# Predawn

[![Crates.io version](https://img.shields.io/crates/v/predawn.svg?style=flat-square)](https://crates.io/crates/predawn)
[![docs.rs docs](https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square)](https://docs.rs/predawn)

`predawn` is a Rust web framework like `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::().await;
}

#[derive(Clone)]
#[Singleton]
struct Controller;

#[controller]
impl Controller {
#[endpoint(paths = ["/"], methods = [post])]
async fn hello(&self, name: String) -> String {
format!("Hello {name}")
}
}
```

## Features

- Built-in OpenAPI support.
- Automatic dependency injection.
- Programmable configuration.

More examples can be found in the [examples](./examples/) directories.

## More complex example

```rust
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::().await;
}

#[async_trait]
trait Service: Send + Sync {
fn arc(self) -> Arc
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,
}

#[controller]
impl Controller {
#[endpoint(paths = ["/"], methods = [GET])]
async fn hello(&self) -> String {
self.svc.hello().await
}
}
```

## Credits

- [axum](https://github.com/tokio-rs/axum)
- [poem](https://github.com/poem-web/poem)
- [loco](https://github.com/loco-rs/loco)
- [volo-http](https://github.com/cloudwego/volo)
- [salvo](https://github.com/salvo-rs/salvo)