yew_router_nested/
route.rs1use cfg_if::cfg_if;
3#[cfg(feature = "service")]
4use serde::de::DeserializeOwned;
5
6cfg_if! {
7 if #[cfg(feature = "std_web")] {
8 use stdweb::{unstable::TryFrom, Value};
9 }
10}
11
12use serde::{Deserialize, Serialize};
13use std::{
14 fmt::{self, Debug},
15 ops::Deref,
16};
17
18#[cfg(all(feature = "service", feature = "std_web"))]
20pub trait RouteState:
21 Serialize + DeserializeOwned + Debug + Clone + Default + TryFrom<Value> + 'static
22{
23}
24#[cfg(all(feature = "service", feature = "std_web"))]
25impl<T> RouteState for T where
26 T: Serialize + DeserializeOwned + Debug + Clone + Default + TryFrom<Value> + 'static
27{
28}
29
30#[cfg(all(feature = "service", feature = "web_sys"))]
32pub trait RouteState: Serialize + DeserializeOwned + Debug + Clone + Default + 'static {}
33#[cfg(all(feature = "service", feature = "web_sys"))]
34impl<T> RouteState for T where T: Serialize + DeserializeOwned + Debug + Clone + Default + 'static {}
35
36#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
38pub struct Route<STATE = ()> {
39 pub route: String,
41 pub state: STATE,
43}
44
45impl Route<()> {
46 pub fn new_no_state<T: AsRef<str>>(route: T) -> Self {
50 Route {
51 route: route.as_ref().to_string(),
52 state: (),
53 }
54 }
55}
56
57impl<STATE: Default> Route<STATE> {
58 pub fn new_default_state<T: AsRef<str>>(route: T) -> Self {
60 Route {
61 route: route.as_ref().to_string(),
62 state: STATE::default(),
63 }
64 }
65}
66
67impl<STATE> fmt::Display for Route<STATE> {
68 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
69 std::fmt::Display::fmt(&self.route, f)
70 }
71}
72
73impl<STATE> Deref for Route<STATE> {
74 type Target = String;
75
76 fn deref(&self) -> &Self::Target {
77 &self.route
78 }
79}