diff --git a/crates/craft-macros/examples/add.rs b/crates/craft-macros/examples/add.rs index bde625735..2fc103959 100644 --- a/crates/craft-macros/examples/add.rs +++ b/crates/craft-macros/examples/add.rs @@ -7,11 +7,11 @@ use std::sync::Arc; #[tokio::main] async fn main() { - let service = Arc::new(Service::new(1)); + let opts = Arc::new(Opts::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())); + .push(Router::with_path("add1").get(opts.add1())) + .push(Router::with_path("add2").get(opts.add2())) + .push(Router::with_path("add3").get(Opts::add3())); let doc = OpenApi::new("Example API", "0.0.1").merge_router(&router); let router = router .push(doc.into_router("/api-doc/openapi.json")) @@ -21,12 +21,12 @@ async fn main() { } #[derive(Clone)] -pub struct Service { +pub struct Opts { state: i64, } #[craft] -impl Service { +impl Opts { fn new(state: i64) -> Self { Self { state } } diff --git a/crates/craft/examples/add.rs b/crates/craft/examples/add.rs index d3d647562..f8bb5fac1 100644 --- a/crates/craft/examples/add.rs +++ b/crates/craft/examples/add.rs @@ -7,11 +7,11 @@ use std::sync::Arc; #[tokio::main] async fn main() { - let service = Arc::new(Service::new(1)); + let opts = Arc::new(Opts::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())); + .push(Router::with_path("add1").get(opts.add1())) + .push(Router::with_path("add2").get(opts.add2())) + .push(Router::with_path("add3").get(Opts::add3())); let doc = OpenApi::new("Example API", "0.0.1").merge_router(&router); let router = router .push(doc.into_router("/api-doc/openapi.json")) @@ -21,12 +21,12 @@ async fn main() { } #[derive(Clone)] -pub struct Service { +pub struct Opts { state: i64, } #[craft] -impl Service { +impl Opts { fn new(state: i64) -> Self { Self { state } } diff --git a/examples/craft/Cargo.toml b/examples/craft/Cargo.toml new file mode 100644 index 000000000..16be23636 --- /dev/null +++ b/examples/craft/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "example-craft" +version.workspace = true +edition.workspace = true +publish.workspace = true + +[dependencies] +salvo = { workspace = true, features = ["craft", "oapi"] } +tokio = { workspace = true, features = ["macros"] } +tracing.workspace = true +tracing-subscriber.workspace = true diff --git a/examples/craft/src/main.rs b/examples/craft/src/main.rs new file mode 100644 index 000000000..b04e606d4 --- /dev/null +++ b/examples/craft/src/main.rs @@ -0,0 +1,52 @@ +use salvo::oapi::extract::*; +use salvo::prelude::*; +use std::sync::Arc; + +#[tokio::main] +async fn main() { + let opts = Arc::new(Opts::new(1)); + let router = Router::new() + .push(Router::with_path("add1").get(opts.add1())) + .push(Router::with_path("add2").get(opts.add2())) + .push(Router::with_path("add3").get(Opts::add3())); + let doc = OpenApi::new("Example API", "0.0.1").merge_router(&router); + let router = router + .push(doc.into_router("/api-doc/openapi.json")) + .push(SwaggerUi::new("/api-doc/openapi.json").into_router("swagger-ui")); + let acceptor = TcpListener::new("127.0.0.1:5800").bind().await; + Server::new(acceptor).serve(router).await; +} + +#[derive(Clone)] +pub struct Opts { + state: i64, +} + +#[craft] +impl Opts { + fn new(state: i64) -> Self { + Self { state } + } + /// doc line 1 + /// doc line 2 + #[craft(handler)] + fn add1(&self, left: QueryParam, right: QueryParam) -> String { + (self.state + *left + *right).to_string() + } + /// doc line 3 + /// doc line 4 + #[craft(endpoint)] + pub(crate) fn add2( + self: ::std::sync::Arc, + left: QueryParam, + right: QueryParam, + ) -> String { + (self.state + *left + *right).to_string() + } + /// doc line 5 + /// doc line 6 + #[craft(endpoint(responses((status_code = 400, description = "Wrong request parameters."))))] + pub fn add3(left: QueryParam, right: QueryParam) -> String { + (*left + *right).to_string() + } +}