use default fullstackcontext instead
This commit is contained in:
1 parent
af215e4e80
commit
71e01d5be6
2 files changed
+14
-16
No files matched your search
@@ -126,8 +126,19 @@ impl FullstackContext {
|
||||
/// The body of the request is always empty when using this method, as the body can only be consumed once in the server
|
||||
/// function extractors.
|
||||
pub async fn extract<T: FromRequest<Self, M>, M>() -> Result<T, ServerFnError> {
|
||||
let this = Self::current()
|
||||
.ok_or_else(|| ServerFnError::new("No FullstackContext found".to_string()))?;
|
||||
let this = Self::current().unwrap_or_else(|| {
|
||||
// Create a dummy context if one doesn't exist, making the function usable outside of a request context
|
||||
FullstackContext::new(
|
||||
axum_core::extract::Request::builder()
|
||||
.method("GET")
|
||||
.uri("/")
|
||||
.header("X-Dummy-Header", "true")
|
||||
.body(())
|
||||
.unwrap()
|
||||
.into_parts()
|
||||
.0,
|
||||
)
|
||||
});
|
||||
|
||||
let parts = this.request_headers.read().clone();
|
||||
let request = axum_core::extract::Request::from_parts(parts, Default::default());
|
||||
|
||||
@@ -432,15 +432,6 @@ fn route_impl_with_route(
|
||||
|
||||
let extracted_as_server_headers = route.extracted_as_server_headers(query_tokens.clone());
|
||||
|
||||
// Generate extraction code based on whether there are server extractors
|
||||
let extraction_code = if route.server_args.is_empty() {
|
||||
quote! { Default::default() }
|
||||
} else {
|
||||
quote! {
|
||||
dioxus_fullstack::FullstackContext::extract::<(#(#server_types,)*), _>().await?
|
||||
}
|
||||
};
|
||||
|
||||
Ok(quote! {
|
||||
#(#fn_docs)*
|
||||
#route_docs
|
||||
@@ -564,11 +555,7 @@ fn route_impl_with_route(
|
||||
}
|
||||
|
||||
// Extract the server arguments from the context if needed.
|
||||
// If there are no server extractors, use Default::default() which allows
|
||||
// the function to be called from backend code without HTTP context.
|
||||
// If there are server extractors, extraction will fail with a clear error
|
||||
// when called from backend code without HTTP context.
|
||||
let (#(#server_names,)*) = #extraction_code;
|
||||
let (#(#server_names,)*) = dioxus_fullstack::FullstackContext::extract::<(#(#server_types,)*), _>().await?;
|
||||
|
||||
// Call the function directly
|
||||
return #fn_on_server_name #ty_generics(
|
||||
|
||||
Reference in new issue
Block a user