1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#![recursion_limit = "128"] #[deny(missing_docs)] extern crate proc_macro; extern crate syn; mod create_routes_macro; mod route_macro; /// An attribute that turns a function into a view route /// /// ```ignore /// #[route(path = "/users/:user_id")] /// fn my_route(user_id: u32) -> VirtualNode { /// let user_id = format!("{}", user_id); /// html! { <div id=user_id> World </div> } /// } /// /// fn main() { /// let mut router = Router::default(); /// /// router.set_route_handlers(create_routes![ /// my_route, /// ]); /// /// assert_eq!( /// router.view("/users/5").unwrap(), /// html! { <div id="5"> Hello World </div> } /// ); /// /// } /// ``` #[proc_macro_attribute] pub fn route( args: proc_macro::TokenStream, input: proc_macro::TokenStream, ) -> proc_macro::TokenStream { route_macro::route(args, input) } /// ```ignore /// #[route(path = "/")] /// fn my_route() -> VirtualNode { /// html! { Hello World } /// } /// /// #[route(path = "/:id")] /// fn route2(id: u8) -> VirtualNode { /// html! { Route number 2 } /// } /// /// fn main() { /// let mut router = Router::default(); /// /// router.set_route_handlers(create_routes![ /// my_route, /// route2 /// ]); /// /// assert_eq!( /// router.view("/").unwrap(), /// html! { Hello World } /// ); /// /// } /// ``` #[proc_macro] pub fn create_routes(input: proc_macro::TokenStream) -> proc_macro::TokenStream { create_routes_macro::create_routes(input) }