From 7bff22756beec82b4a1470e2d325b706dc56e5f2 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Thu, 23 Oct 2025 01:36:39 +0200 Subject: feat(buy): Provide basic buy interface --- src/components/async_fetch.rs | 67 ++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 29 deletions(-) (limited to 'src/components/async_fetch.rs') diff --git a/src/components/async_fetch.rs b/src/components/async_fetch.rs index 7105c6f..f24e3a5 100644 --- a/src/components/async_fetch.rs +++ b/src/components/async_fetch.rs @@ -1,5 +1,23 @@ +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) => {{ + ( + fetcher = $fetcher:block + producer = |$bound_variable:pat_param| $producer:block + ) => {{ use leptos::{ prelude::{ElementChild, LocalResource, Suspend, Transition}, view, @@ -18,33 +36,24 @@ macro_rules! AsyncFetch { } }}; + ( + @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; - -// #[component] -// pub fn AsyncFetch( -// fetcher: impl Fn() -> Fut + 'static + Send + Sync, -// producer: P, -// ) -> impl IntoView -// where -// V: IntoView + 'static, -// P: Fn(T) -> V + 'static + Send + Sync, -// Fut: Future> + 'static, -// T: 'static, -// LocalResource>: IntoFuture> + Send, -// { -// view! { -// "Loading..."

} -// }> -// { || Suspend::new(async { -// let value_resource = LocalResource::new( || fetcher()); -// value_resource -// .await -// .map(|value| { -// producer(value) -// }) -// })} -//
-// } -// } -- cgit 1.4.1