1
0

router.rs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use dioxus::prelude::*;
  2. use dioxus_router::{use_router, Link};
  3. #[derive(PartialEq, Debug, Clone)]
  4. pub enum Route {
  5. // #[at("/")]
  6. Home,
  7. // #[at("/:id")]
  8. AllUsers { page: u32 },
  9. // #[at("/:id")]
  10. User { id: u32 },
  11. // #[at("/:id")]
  12. BlogList { page: u32 },
  13. // #[at("/:id")]
  14. BlogPost { post_id: u32 },
  15. // #[at("/404")]
  16. // #[not_found]
  17. NotFound,
  18. }
  19. fn app(cx: Scope) -> Element {
  20. let route = use_router(&cx, Route::parse);
  21. cx.render(rsx! {
  22. nav {
  23. Link { to: Route::Home, "Go home!" }
  24. Link { to: Route::AllUsers { page: 0 }, "List all users" }
  25. Link { to: Route::BlogList { page: 0 }, "Blog posts" }
  26. }
  27. match route {
  28. Route::Home => rsx!("Home"),
  29. Route::AllUsers { page } => rsx!("All users - page {page}"),
  30. Route::User { id } => rsx!("User - id: {id}"),
  31. Route::BlogList { page } => rsx!("Blog posts - page {page}"),
  32. Route::BlogPost { post_id } => rsx!("Blog post - post {post_id}"),
  33. Route::NotFound => rsx!("Not found"),
  34. }
  35. footer {}
  36. })
  37. }
  38. impl Route {
  39. // Generate the appropriate route from the "tail" end of the URL
  40. fn parse(url: &str) -> Self {
  41. use Route::*;
  42. match url {
  43. "/" => Home,
  44. "/users" => AllUsers { page: 1 },
  45. "/users/:page" => AllUsers { page: 1 },
  46. "/users/:page/:id" => User { id: 1 },
  47. "/blog" => BlogList { page: 1 },
  48. "/blog/:page" => BlogList { page: 1 },
  49. "/blog/:page/:id" => BlogPost { post_id: 1 },
  50. _ => NotFound,
  51. }
  52. }
  53. }
  54. fn main() {}