dioxus_router/
lib.rs

1#![doc = include_str!("../README.md")]
2#![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")]
3#![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")]
4// cannot use forbid, because props derive macro generates #[allow(missing_docs)]
5#![deny(missing_docs)]
6#![allow(non_snake_case)]
7
8pub mod navigation;
9pub mod routable;
10
11/// Components interacting with the router.
12pub mod components {
13    #[cfg(feature = "html")]
14    mod default_errors;
15    #[cfg(feature = "html")]
16    pub use default_errors::*;
17
18    #[cfg(feature = "html")]
19    mod history_buttons;
20    #[cfg(feature = "html")]
21    pub use history_buttons::*;
22
23    #[cfg(feature = "html")]
24    mod link;
25    #[cfg(feature = "html")]
26    pub use link::*;
27
28    mod outlet;
29    pub use outlet::*;
30
31    mod router;
32    pub use router::*;
33
34    mod history_provider;
35    pub use history_provider::*;
36
37    #[doc(hidden)]
38    pub mod child_router;
39}
40
41mod contexts {
42    pub(crate) mod navigator;
43    pub(crate) mod outlet;
44    pub use outlet::{use_outlet_context, OutletContext};
45    pub(crate) mod router;
46    pub use navigator::*;
47    pub(crate) use router::*;
48    pub use router::{root_router, GenericRouterContext, ParseRouteError, RouterContext};
49}
50
51mod router_cfg;
52
53/// Hooks for interacting with the router in components.
54pub mod hooks {
55    mod use_router;
56    pub use use_router::*;
57
58    mod use_route;
59
60    pub use use_route::*;
61
62    mod use_navigator;
63    pub use use_navigator::*;
64}
65
66pub use hooks::router;
67
68#[cfg(feature = "html")]
69pub use crate::components::{GoBackButton, GoForwardButton, HistoryButtonProps, Link, LinkProps};
70pub use crate::components::{Outlet, Router, RouterProps};
71pub use crate::contexts::*;
72pub use crate::hooks::*;
73pub use crate::navigation::*;
74pub use crate::routable::*;
75pub use crate::router_cfg::RouterConfig;
76pub use dioxus_router_macro::Routable;
77
78#[doc(hidden)]
79/// A component with props used in the macro
80pub trait HasProps {
81    /// The props type of the component.
82    type Props;
83}
84
85impl<P> HasProps for dioxus_core::Component<P> {
86    type Props = P;
87}
88
89mod utils {
90    pub(crate) mod use_router_internal;
91}
92
93#[doc(hidden)]
94pub mod exports {
95    pub use crate::query_sets::*;
96    pub use percent_encoding;
97}
98
99pub(crate) mod query_sets {
100    //! Url percent encode sets defined [here](https://url.spec.whatwg.org/#percent-encoded-bytes)
101
102    use percent_encoding::AsciiSet;
103
104    /// The ASCII set that must be escaped in query strings.
105    pub const QUERY_ASCII_SET: &AsciiSet = &percent_encoding::CONTROLS
106        .add(b' ')
107        .add(b'"')
108        .add(b'#')
109        .add(b'<')
110        .add(b'>');
111
112    /// The ASCII set that must be escaped in path segments.
113    pub const PATH_ASCII_SET: &AsciiSet = &QUERY_ASCII_SET
114        .add(b'?')
115        .add(b'^')
116        .add(b'`')
117        .add(b'{')
118        .add(b'}');
119
120    /// The ASCII set that must be escaped in hash fragments.
121    pub const FRAGMENT_ASCII_SET: &AsciiSet = &percent_encoding::CONTROLS
122        .add(b' ')
123        .add(b'"')
124        .add(b'<')
125        .add(b'>')
126        .add(b'`');
127}