macro_rules! AsyncResource { ( ( $( $input_name:ident : $input_type:ty = $input:expr ),* ) -> $output:ty $fetcher:block ) => {{ async fn fetcher($($input_name : $input_type),*) -> $output $fetcher leptos::prelude::LocalResource::new(move || fetcher($($input),*)) }} } pub(crate) use AsyncResource; macro_rules! AsyncFetch { ( fetcher = $fetcher:block producer = |$bound_variable:pat_param| $producer:block ) => {{ use leptos::{ prelude::{ElementChild, LocalResource, Suspend, Transition}, view, }; view! { "Loading..."

} }> {move || Suspend::new(async move { let resource = { LocalResource::new(move || $fetcher) }; resource .await .map(|$bound_variable| $producer) })}
} }}; ( @map_error_in_producer from_resource = $resource:ident producer = |$bound_variable:pat_param| $producer:block ) => {{ use leptos::prelude::{ElementChild, Suspend, Transition}; leptos::view! { "Loading..."

} }> {move || Suspend::new(async move { $resource .await .map(|$bound_variable| $producer) })}
} }}; } pub(crate) use AsyncFetch;