Merge branch 'master' into intigrate-collect-assets
This commit is contained in:
1 parent
ffb5de91d1
commit
f976e08f71
379 files changed
+1962
-13517
No files matched your search
@@ -210,7 +210,7 @@ pub fn routable(input: TokenStream) -> TokenStream {
|
||||
let display_impl = route_enum.impl_display();
|
||||
let routable_impl = route_enum.routable_impl();
|
||||
|
||||
quote! {
|
||||
(quote! {
|
||||
#error_type
|
||||
|
||||
#display_impl
|
||||
@@ -218,7 +218,7 @@ pub fn routable(input: TokenStream) -> TokenStream {
|
||||
#routable_impl
|
||||
|
||||
#parse_impl
|
||||
}
|
||||
})
|
||||
.into()
|
||||
}
|
||||
|
||||
@@ -482,7 +482,8 @@ impl RouteEnum {
|
||||
let route = s;
|
||||
let (route, _hash) = route.split_once('#').unwrap_or((route, ""));
|
||||
let (route, query) = route.split_once('?').unwrap_or((route, ""));
|
||||
let mut segments = route.split('/');
|
||||
let query = dioxus_router::exports::urlencoding::decode(query).unwrap_or(query.into());
|
||||
let mut segments = route.split('/').map(|s| dioxus_router::exports::urlencoding::decode(s).unwrap_or(s.into()));
|
||||
// skip the first empty segment
|
||||
if s.starts_with('/') {
|
||||
let _ = segments.next();
|
||||
@@ -677,9 +678,9 @@ impl ToTokens for SegmentType {
|
||||
impl<'a> From<&'a RouteSegment> for SegmentType {
|
||||
fn from(value: &'a RouteSegment) -> Self {
|
||||
match value {
|
||||
segment::RouteSegment::Static(s) => SegmentType::Static(s.to_string()),
|
||||
segment::RouteSegment::Dynamic(s, _) => SegmentType::Dynamic(s.to_string()),
|
||||
segment::RouteSegment::CatchAll(s, _) => SegmentType::CatchAll(s.to_string()),
|
||||
RouteSegment::Static(s) => SegmentType::Static(s.to_string()),
|
||||
RouteSegment::Dynamic(s, _) => SegmentType::Dynamic(s.to_string()),
|
||||
RouteSegment::CatchAll(s, _) => SegmentType::CatchAll(s.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ impl QuerySegment {
|
||||
let ident = &self.ident;
|
||||
let ty = &self.ty;
|
||||
quote! {
|
||||
let #ident = <#ty as dioxus_router::routable::FromQuery>::from_query(query);
|
||||
let #ident = <#ty as dioxus_router::routable::FromQuery>::from_query(&*query);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -277,10 +277,8 @@ impl Route {
|
||||
}
|
||||
}
|
||||
for segment in &self.segments {
|
||||
if let RouteSegment::Dynamic(other, ..) = segment {
|
||||
if other == name {
|
||||
from_route = true
|
||||
}
|
||||
if segment.name().as_ref() == Some(name) {
|
||||
from_route = true
|
||||
}
|
||||
}
|
||||
if let Some(query) = &self.query {
|
||||
|
||||
@@ -312,7 +312,8 @@ impl<'a> RouteTreeSegmentData<'a> {
|
||||
quote! {
|
||||
{
|
||||
let mut segments = segments.clone();
|
||||
if let Some(segment) = segments.next() {
|
||||
let segment = segments.next();
|
||||
if let Some(segment) = segment.as_deref() {
|
||||
if #segment == segment {
|
||||
#(#children)*
|
||||
}
|
||||
@@ -369,7 +370,7 @@ impl<'a> RouteTreeSegmentData<'a> {
|
||||
quote! {
|
||||
let mut trailing = String::from("/");
|
||||
for seg in segments.clone() {
|
||||
trailing += seg;
|
||||
trailing += &*seg;
|
||||
trailing += "/";
|
||||
}
|
||||
trailing.pop();
|
||||
@@ -506,7 +507,9 @@ fn return_constructed(
|
||||
let remaining_segments = segments.clone();
|
||||
let mut segments_clone = segments.clone();
|
||||
let next_segment = segments_clone.next();
|
||||
let next_segment = next_segment.as_deref();
|
||||
let segment_after_next = segments_clone.next();
|
||||
let segment_after_next = segment_after_next.as_deref();
|
||||
match (next_segment, segment_after_next) {
|
||||
// This is the last segment, return the parsed route
|
||||
(None, _) | (Some(""), None) => {
|
||||
@@ -516,7 +519,7 @@ fn return_constructed(
|
||||
_ => {
|
||||
let mut trailing = String::new();
|
||||
for seg in remaining_segments {
|
||||
trailing += seg;
|
||||
trailing += &*seg;
|
||||
trailing += "/";
|
||||
}
|
||||
trailing.pop();
|
||||
|
||||
@@ -25,7 +25,7 @@ impl RouteSegment {
|
||||
match self {
|
||||
Self::Static(segment) => quote! { write!(f, "/{}", #segment)?; },
|
||||
Self::Dynamic(ident, _) => quote! { write!(f, "/{}", #ident)?; },
|
||||
Self::CatchAll(ident, _) => quote! { #ident.display_route_segements(f)?; },
|
||||
Self::CatchAll(ident, _) => quote! { #ident.display_route_segments(f)?; },
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ impl RouteSegment {
|
||||
{
|
||||
let mut segments = segments.clone();
|
||||
let segment = segments.next();
|
||||
let segment = segment.as_deref();
|
||||
let parsed = if let Some(#segment) = segment {
|
||||
Ok(())
|
||||
} else {
|
||||
@@ -80,7 +81,8 @@ impl RouteSegment {
|
||||
quote! {
|
||||
{
|
||||
let mut segments = segments.clone();
|
||||
let parsed = if let Some(segment) = segments.next() {
|
||||
let segment = segments.next();
|
||||
let parsed = if let Some(segment) = segment.as_deref() {
|
||||
<#ty as dioxus_router::routable::FromRouteSegment>::from_route_segment(segment).map_err(|err| #error_enum_name::#error_enum_varient(#inner_parse_enum::#error_name(err)))
|
||||
} else {
|
||||
Err(#error_enum_name::#error_enum_varient(#inner_parse_enum::#missing_error_name))
|
||||
@@ -100,9 +102,12 @@ impl RouteSegment {
|
||||
quote! {
|
||||
{
|
||||
let parsed = {
|
||||
let mut segments = segments.clone();
|
||||
let segments: Vec<_> = segments.collect();
|
||||
<#ty as dioxus_router::routable::FromRouteSegments>::from_route_segments(&segments).map_err(|err| #error_enum_name::#error_enum_varient(#inner_parse_enum::#error_name(err)))
|
||||
let remaining_segments: Vec<_> = segments.collect();
|
||||
let mut new_segments: Vec<&str> = Vec::new();
|
||||
for segment in &remaining_segments {
|
||||
new_segments.push(&*segment);
|
||||
}
|
||||
<#ty as dioxus_router::routable::FromRouteSegments>::from_route_segments(&new_segments).map_err(|err| #error_enum_name::#error_enum_varient(#inner_parse_enum::#error_name(err)))
|
||||
};
|
||||
match parsed {
|
||||
Ok(#name) => {
|
||||
|
||||
Reference in new issue
Block a user