create non generic wrappers for each route
This commit is contained in:
1 parent
3678fa1d3f
commit
d3b21879fb
9 files changed
+58
-32
No files matched your search
@@ -32,8 +32,26 @@ pub fn routable(input: TokenStream) -> TokenStream {
|
||||
let parse_impl = route_enum.parse_impl();
|
||||
let display_impl = route_enum.impl_display();
|
||||
let routable_impl = route_enum.routable_impl();
|
||||
let name = &route_enum.name;
|
||||
let vis = &route_enum.vis;
|
||||
|
||||
quote! {
|
||||
#vis fn Outlet(cx: dioxus::prelude::Scope) -> dioxus::prelude::Element {
|
||||
dioxus_router::prelude::GenericOutlet::<#name>(cx)
|
||||
}
|
||||
|
||||
#vis fn Router(cx: dioxus::prelude::Scope<dioxus_router::prelude::GenericRouterProps<#name>>) -> dioxus::prelude::Element {
|
||||
dioxus_router::prelude::GenericRouter(cx)
|
||||
}
|
||||
|
||||
#vis fn Link<'a>(cx: dioxus::prelude::Scope<'a, dioxus_router::prelude::GenericLinkProps<'a, #name>>) -> dioxus::prelude::Element<'a> {
|
||||
dioxus_router::prelude::GenericLink(cx)
|
||||
}
|
||||
|
||||
#vis fn use_router<R: dioxus_router::prelude::Routable + Clone>(cx: &dioxus::prelude::ScopeState) -> &dioxus_router::prelude::GenericRouterContext<R> {
|
||||
dioxus_router::prelude::use_generic_router::<R>(cx)
|
||||
}
|
||||
|
||||
#route_enum
|
||||
|
||||
#error_type
|
||||
@@ -48,6 +66,7 @@ pub fn routable(input: TokenStream) -> TokenStream {
|
||||
}
|
||||
|
||||
struct RouteEnum {
|
||||
vis: syn::Visibility,
|
||||
name: Ident,
|
||||
routes: Vec<Route>,
|
||||
nests: Vec<Nest>,
|
||||
@@ -58,6 +77,7 @@ struct RouteEnum {
|
||||
impl RouteEnum {
|
||||
fn parse(data: syn::ItemEnum) -> syn::Result<Self> {
|
||||
let name = &data.ident;
|
||||
let vis = &data.vis;
|
||||
|
||||
let mut site_map = Vec::new();
|
||||
let mut site_map_stack: Vec<Vec<SiteMapSegment>> = Vec::new();
|
||||
@@ -201,6 +221,7 @@ impl RouteEnum {
|
||||
}
|
||||
|
||||
let myself = Self {
|
||||
vis: vis.clone(),
|
||||
name: name.clone(),
|
||||
routes,
|
||||
nests,
|
||||
|
||||
Reference in new issue
Block a user