diff --git a/Cargo.lock b/Cargo.lock index 145f91b..42338c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -223,15 +223,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.15.3" +version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "cc" -version = "1.0.88" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -241,9 +241,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ "android-tzdata", "iana-time-zone", @@ -533,9 +533,9 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -793,12 +793,19 @@ dependencies = [ "async-std", "chrono", "futures", - "proc-macro2", - "quote", "regex", "serde", "serde_json", - "syn 2.0.52", + "surfer_macros", +] + +[[package]] +name = "surfer_macros" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -859,9 +866,9 @@ checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -869,9 +876,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", @@ -884,9 +891,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -896,9 +903,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -906,9 +913,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -919,15 +926,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 90e324a..72cc4ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,10 @@ authors = ["Patrick Arndt "] async-std = { version = "1.12.0", features = ["attributes"] } chrono = "0.4.34" futures = "0.3.30" -proc-macro2 = "1.0" -syn = { version = "^2.0", features = ["full", "derive"] } -quote = "1.0" regex = "1.10.3" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } - +surfer_macros = { path = "./surfer_macros" } [lib] name = "surfer" diff --git a/bin/main_example.rs b/bin/main_example.rs index e7cc145..a6072c7 100644 --- a/bin/main_example.rs +++ b/bin/main_example.rs @@ -7,6 +7,7 @@ use surfer::response::json_response::JsonResponse; use surfer::response::{IntoResponse, Response}; use surfer::route; use surfer::server::Server; +use surfer_macros::surfer_launch; async fn index(_: Request) -> Response { let json_obj = json!({ @@ -22,7 +23,7 @@ async fn index(_: Request) -> Response { } #[cfg(not(release))] -#[async_std::main] +#[surfer_launch] async fn main() { println!("Testing the 'surfer' library..."); let mut server = Server::new(None, None); diff --git a/src/lib.rs b/src/lib.rs index 0183c8d..dbaf95b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,4 +3,4 @@ pub mod request; pub mod response; pub mod server; mod utils; - +pub use surfer_macros; diff --git a/src/request.rs b/src/request.rs index 92a17c2..5c6d979 100644 --- a/src/request.rs +++ b/src/request.rs @@ -2,6 +2,7 @@ use async_std::net::TcpStream; use async_std::prelude::*; use std::collections::HashMap; +#[derive(Debug,Clone)] pub enum Method { GET, POST, diff --git a/surfer_macros/Cargo.lock b/surfer_macros/Cargo.lock new file mode 100644 index 0000000..2df3181 --- /dev/null +++ b/surfer_macros/Cargo.lock @@ -0,0 +1,46 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "surfer_macros" +version = "0.1.0" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/surfer_macros/Cargo.toml b/surfer_macros/Cargo.toml new file mode 100644 index 0000000..8ac9b88 --- /dev/null +++ b/surfer_macros/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "surfer_macros" +version = "0.1.0" +edition = "2018" + +[lib] +proc-macro = true + +[dependencies] +proc-macro2 = "1.0" +syn = { version = "1.0", features = ["full"] } +quote = "1.0" \ No newline at end of file diff --git a/surfer_macros/src/lib.rs b/surfer_macros/src/lib.rs new file mode 100644 index 0000000..a1ff19c --- /dev/null +++ b/surfer_macros/src/lib.rs @@ -0,0 +1,26 @@ +extern crate proc_macro; + +use proc_macro::TokenStream; +use quote::{format_ident, quote}; +use syn::{parse_macro_input, ItemFn, LitStr}; + +#[proc_macro_attribute] +pub fn surfer_launch(_attr: TokenStream, item: TokenStream) -> TokenStream { + // Parse the input tokens into a syntax tree + let input = parse_macro_input!(item as ItemFn); + + // Get the components of the input function + let name = &input.sig.ident; + let inputs = &input.sig.inputs; + let output = &input.sig.output; + let body = &input.block; + + // Generate the new function + let expanded = quote! { + #[async_std::main] + async fn #name(#inputs) #output { + #body + } + }; + expanded.into() +} \ No newline at end of file