43 releases (22 breaking)
Uses new Rust 2024
| 0.93.0 | Apr 30, 2026 |
|---|---|
| 0.91.1 | Apr 3, 2026 |
| 0.89.3 | Mar 18, 2026 |
| 0.87.1 | Dec 31, 2025 |
| 0.74.2 | Nov 11, 2024 |
#670 in #web-framework
140,554 downloads per month
Used in 3 crates
(via salvo-craft)
20KB
253 lines
Salvo is an extremely simple and powerful Rust web backend framework. Only basic Rust knowledge is required to develop backend services.
salvo-craft-macros
Salvo Handler modular craft macros.
#[craft]
#[craft] is an attribute macro that converts methods in an impl block into Salvo's Handler implementations.
use salvo::oapi::extract::*;
use salvo::prelude::*;
use salvo_craft_macros::craft;
use std::sync::Arc;
#[tokio::main]
async fn main() {
let service = Arc::new(Service::new(1));
let router = Router::new()
.push(Router::with_path("add1").get(service.add1()))
.push(Router::with_path("add2").get(service.add2()))
.push(Router::with_path("add3").get(Service::add3()));
let acceptor = TcpListener::new("127.0.0.1:8698").bind().await;
Server::new(acceptor).serve(router).await;
}
#[derive(Clone)]
pub struct Service {
state: i64,
}
#[craft]
impl Service {
fn new(state: i64) -> Self {
Self { state }
}
/// doc line 1
/// doc line 2
#[craft(handler)]
fn add1(&self, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
(self.state + *left + *right).to_string()
}
/// doc line 3
/// doc line 4
#[craft(handler)]
pub(crate) fn add2(self: ::std::sync::Arc<Self>, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
(self.state + *left + *right).to_string()
}
/// doc line 5
/// doc line 6
#[craft(handler)]
pub fn add3(left: QueryParam<i64>, right: QueryParam<i64>) -> String {
(*left + *right).to_string()
}
}
Note: #[craft(handler)] can be replaced with #[craft(endpoint(...))] for more configuration options.
NOTE: When using &self as the method receiver, the containing type must implement the Clone trait.
Documentation & Resources
☕ Donate
Salvo is an open source project. If you want to support Salvo, you can ☕ buy me a coffee here.
⚠️ License
Salvo is licensed under Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0).
Dependencies
~4–6MB
~116K SLoC