salvo-craft 0.93.0

Salvo Handler modular craft.
Documentation
#![allow(missing_docs)]

use std::sync::Arc;

use salvo::oapi::OpenApi;
use salvo::oapi::extract::QueryParam;
use salvo::prelude::*;
use salvo_craft::craft;

#[derive(Clone, Debug)]
pub struct Calculator {
    base: i64,
}

#[craft]
impl Calculator {
    #[craft(handler)]
    fn add(&self, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        (self.base + *left + *right).to_string()
    }

    #[craft(handler)]
    fn add_with_arc(self: Arc<Self>, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        (self.base + *left + *right).to_string()
    }

    #[craft(endpoint)]
    fn add_plain(left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        (*left + *right).to_string()
    }
}

fn main() {
    let calculator = Arc::new(Calculator { base: 1 });
    let router = Router::new()
        .push(Router::with_path("add").get(calculator.add()))
        .push(Router::with_path("add-arc").get(calculator.add_with_arc()))
        .push(Router::with_path("add-plain").get(Calculator::add_plain()));

    let _doc = OpenApi::new("Craft Example", "0.1.0").merge_router(&router);
}