From 9c0be9e317aeaaad45cd240698a6a8c6f87c21c0 Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Wed, 30 Nov 2022 07:46:04 -0500 Subject: [PATCH 1/8] Finishing implementing SignalSetter wrapper. --- leptos_reactive/src/lib.rs | 2 ++ leptos_reactive/src/signal_wrappers_write.rs | 18 ++++++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/leptos_reactive/src/lib.rs b/leptos_reactive/src/lib.rs index dcecae960..4f33214ba 100644 --- a/leptos_reactive/src/lib.rs +++ b/leptos_reactive/src/lib.rs @@ -77,6 +77,7 @@ mod selector; mod serialization; mod signal; mod signal_wrappers_read; +mod signal_wrappers_write; mod spawn; mod suspense; @@ -91,6 +92,7 @@ pub use selector::*; pub use serialization::*; pub use signal::*; pub use signal_wrappers_read::*; +pub use signal_wrappers_write::*; pub use spawn::*; pub use suspense::*; diff --git a/leptos_reactive/src/signal_wrappers_write.rs b/leptos_reactive/src/signal_wrappers_write.rs index 7c08cec29..7ab13308a 100644 --- a/leptos_reactive/src/signal_wrappers_write.rs +++ b/leptos_reactive/src/signal_wrappers_write.rs @@ -1,6 +1,6 @@ use std::rc::Rc; -use crate::{Memo, ReadSignal, RwSignal, Scope, UntrackedGettableSignal}; +use crate::{RwSignal, Scope, WriteSignal}; /// A wrapper for any kind of settable reactive signal: a [WriteSignal](crate::WriteSignal), /// [RwSignal](crate::RwSignal), or closure that receives a value and sets a signal depending @@ -86,7 +86,7 @@ where pub fn set(&self, value: T) { match &self.0 { SignalSetterTypes::Write(s) => s.set(value), - SignalSetterTypes::Wrapped(_, s) => s(value), + SignalSetterTypes::Mapped(_, s) => s(value), } } } @@ -108,8 +108,8 @@ enum SignalSetterTypes where T: 'static, { - Write(WriteSignalSetter), - Mapped(Scope, Rc), + Write(WriteSignal), + Mapped(Scope, Rc), } impl std::fmt::Debug for SignalSetterTypes @@ -118,9 +118,8 @@ where { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Self::ReadSignal(arg0) => f.debug_tuple("ReadSignal").field(arg0).finish(), - Self::Memo(arg0) => f.debug_tuple("Memo").field(arg0).finish(), - Self::DerivedSignal(_, _) => f.debug_tuple("DerivedSignal").finish(), + Self::Write(arg0) => f.debug_tuple("WriteSignal").field(arg0).finish(), + Self::Mapped(_, _) => f.debug_tuple("Mapped").finish(), } } } @@ -131,9 +130,8 @@ where { fn eq(&self, other: &Self) -> bool { match (self, other) { - (Self::ReadSignal(l0), Self::ReadSignal(r0)) => l0 == r0, - (Self::Memo(l0), Self::Memo(r0)) => l0 == r0, - (Self::DerivedSignal(_, l0), Self::DerivedSignal(_, r0)) => std::ptr::eq(l0, r0), + (Self::Write(l0), Self::Write(r0)) => l0 == r0, + (Self::Mapped(_, l0), Self::Mapped(_, r0)) => std::ptr::eq(l0, r0), _ => false, } } From 644d097cb68d5d6401c130c286e9d232298ff324 Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Wed, 30 Nov 2022 11:22:05 -0500 Subject: [PATCH 2/8] Fix `SignalSetter` tests --- leptos_reactive/src/signal_wrappers_write.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/leptos_reactive/src/signal_wrappers_write.rs b/leptos_reactive/src/signal_wrappers_write.rs index 7ab13308a..3061e385e 100644 --- a/leptos_reactive/src/signal_wrappers_write.rs +++ b/leptos_reactive/src/signal_wrappers_write.rs @@ -14,13 +14,13 @@ use crate::{RwSignal, Scope, WriteSignal}; /// # use leptos_reactive::*; /// # create_scope(create_runtime(), |cx| { /// let (count, set_count) = create_signal(cx, 2); -/// let set_double_input = SignalSetter::map(cx, |n| set_count(n * 2)); +/// let set_double_input = SignalSetter::map(cx, move |n| set_count(n * 2)); /// /// // this function takes any kind of signal setter -/// fn set_to_4(setter: &SignalSetter) -> bool { +/// fn set_to_4(setter: &SignalSetter) { /// // ✅ calling the signal sets the value /// // it is a shorthand for arg.set() -/// setter(4) +/// setter(4); /// } /// /// set_to_4(&set_count.into()); @@ -44,10 +44,10 @@ where /// # use leptos_reactive::*; /// # create_scope(create_runtime(), |cx| { /// let (count, set_count) = create_signal(cx, 2); - /// let double_count = SignalSetter::map(cx, move |n| set_count(n * 2)); + /// let set_double_count = SignalSetter::map(cx, move |n| set_count(n * 2)); /// /// // this function takes any kind of signal setter - /// fn set_to_4(setter: &SignalSetter) -> bool { + /// fn set_to_4(setter: &SignalSetter) { /// // ✅ calling the signal sets the value /// // it is a shorthand for arg.set() /// setter(4) @@ -55,7 +55,7 @@ where /// /// set_to_4(&set_count.into()); /// assert_eq!(count(), 4); - /// set_to_4(&set_double_input); + /// set_to_4(&set_double_count); /// assert_eq!(count(), 8); /// # }); /// ``` @@ -69,18 +69,18 @@ where /// # use leptos_reactive::*; /// # create_scope(create_runtime(), |cx| { /// let (count, set_count) = create_signal(cx, 2); - /// let double_count = SignalSetter::map(cx, move |n| set_count(n * 2)); + /// let set_double_count = SignalSetter::map(cx, move |n| set_count(n * 2)); /// /// // this function takes any kind of signal setter - /// fn set_to_4(setter: &SignalSetter) -> bool { + /// fn set_to_4(setter: &SignalSetter) { /// // ✅ calling the signal sets the value /// // it is a shorthand for arg.set() - /// setter(4) + /// setter(4); /// } /// /// set_to_4(&set_count.into()); /// assert_eq!(count(), 4); - /// set_to_4(&set_double_input); + /// set_to_4(&set_double_count); /// assert_eq!(count(), 8); /// # }); pub fn set(&self, value: T) { From a2c5855362a84d3afa93d6d93b232e7b5398d34c Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Wed, 30 Nov 2022 11:27:07 -0500 Subject: [PATCH 3/8] `` component --- examples/fetch/Cargo.toml | 2 +- examples/fetch/src/lib.rs | 22 ++++- leptos_core/Cargo.toml | 1 + leptos_core/src/lib.rs | 2 + leptos_core/src/suspense.rs | 5 +- leptos_core/src/transition.rs | 178 ++++++++++++++++++++++++++++++++++ 6 files changed, 203 insertions(+), 7 deletions(-) create mode 100644 leptos_core/src/transition.rs diff --git a/examples/fetch/Cargo.toml b/examples/fetch/Cargo.toml index 101f6d71d..b9e1e30e8 100644 --- a/examples/fetch/Cargo.toml +++ b/examples/fetch/Cargo.toml @@ -11,7 +11,7 @@ serde = { version = "1", features = ["derive"] } log = "0.4" console_log = "0.2" console_error_panic_hook = "0.1.7" +gloo-timers = { version = "0.2", features = ["futures"] } [dev-dependencies] wasm-bindgen-test = "0.3.0" - diff --git a/examples/fetch/src/lib.rs b/examples/fetch/src/lib.rs index b15af5dc1..ab726bddb 100644 --- a/examples/fetch/src/lib.rs +++ b/examples/fetch/src/lib.rs @@ -1,5 +1,6 @@ use std::time::Duration; +use gloo_timers::future::TimeoutFuture; use leptos::*; use serde::{Deserialize, Serialize}; @@ -9,6 +10,10 @@ pub struct Cat { } async fn fetch_cats(count: u32) -> Result, ()> { + // artificial delay + // the cat API is too fast to show the transition + TimeoutFuture::new(500).await; + if count > 0 { let res = reqwasm::http::Request::get(&format!( "https://api.thecatapi.com/v1/images/search?limit={}", @@ -32,8 +37,9 @@ async fn fetch_cats(count: u32) -> Result, ()> { pub fn fetch_example(cx: Scope) -> web_sys::Element { let (cat_count, set_cat_count) = create_signal::(cx, 1); let cats = create_resource(cx, cat_count, |count| fetch_cats(count)); + let (pending, set_pending) = create_signal(cx, false); - view! { cx, + view! { cx,
+ {move || pending().then(|| view! { cx,

"Loading more cats..."

})}
- + // holds the previous value while new async data is being loaded + // Switch the to to fall back to "Loading..." every time + {move || { cats.read().map(|data| match data { Err(_) => view! { cx,
"Error"
}, - Ok(cats) => view! { cx, + Ok(cats) => view! { cx,
{ cats.iter() .map(|src| { - view! { cx, + view! { cx, } }) @@ -64,7 +76,7 @@ pub fn fetch_example(cx: Scope) -> web_sys::Element { }) } } - +
} diff --git a/leptos_core/Cargo.toml b/leptos_core/Cargo.toml index e19110363..f2513c6ca 100644 --- a/leptos_core/Cargo.toml +++ b/leptos_core/Cargo.toml @@ -12,6 +12,7 @@ leptos_dom = { path = "../leptos_dom", default-features = false, version = "0.0. leptos_macro = { path = "../leptos_macro", default-features = false, version = "0.0.19" } leptos_reactive = { path = "../leptos_reactive", default-features = false, version = "0.0.19" } log = "0.4" +typed-builder = "0.11" [dev-dependencies] leptos = { path = "../leptos", default-features = false, version = "0.0" } diff --git a/leptos_core/src/lib.rs b/leptos_core/src/lib.rs index a3bef651f..9993faf2b 100644 --- a/leptos_core/src/lib.rs +++ b/leptos_core/src/lib.rs @@ -6,10 +6,12 @@ mod for_component; mod map; mod suspense; +mod transition; pub use for_component::*; pub use map::*; pub use suspense::*; +pub use transition::*; /// Describes the properties of a component. This is typically generated by the `Prop` derive macro /// as part of the `#[component]` macro. diff --git a/leptos_core/src/suspense.rs b/leptos_core/src/suspense.rs index 5f2018ffa..b239edd5e 100644 --- a/leptos_core/src/suspense.rs +++ b/leptos_core/src/suspense.rs @@ -20,7 +20,10 @@ where /// If any [Resource](leptos_reactive::Resource)s are read in the `children` of this /// component, it will show the `fallback` while they are loading. Once all are resolved, -/// it will render the `children`. +/// it will render the `children`. If data begin loading again, falls back to `fallback` again. +/// +/// If you’d rather continue displaying the previous `children` while loading new data, see +/// [`Transition`](crate::Transition). /// /// Note that the `children` will be rendered initially (in order to capture the fact that /// those resources are read under the suspense), so you cannot assume that resources have diff --git a/leptos_core/src/transition.rs b/leptos_core/src/transition.rs new file mode 100644 index 000000000..6a04b6c4a --- /dev/null +++ b/leptos_core/src/transition.rs @@ -0,0 +1,178 @@ +use leptos_dom::{Child, IntoChild}; +use leptos_reactive::{provide_context, Scope, SuspenseContext}; +use typed_builder::TypedBuilder; + +/// Props for the [Suspense](crate::Suspense) component, which shows a fallback +/// while [Resource](leptos_reactive::Resource)s are being read. +#[derive(TypedBuilder)] +pub struct TransitionProps +where + F: IntoChild + Clone, + E: IntoChild, + G: Fn() -> E, +{ + /// Will be displayed while resources are pending. + pub fallback: F, + /// A function that will be called when the component transitions into or out of + /// the `pending` state, with its argument indicating whether it is pending (`true`) + /// or not pending (`false`). + #[builder(default, setter(strip_option, into))] + pub on_pending: Option>, + /// Will be displayed once all resources have resolved. + pub children: Box Vec>, +} + +/// If any [Resource](leptos_reactive::Resource)s are read in the `children` of this +/// component, it will show the `fallback` while they are loading. Once all are resolved, +/// it will render the `children`. Unlike [`Suspense`](crate::Suspense), this will not fall +/// back to the `fallback` state if there are further changes after the initial load. +/// +/// Note that the `children` will be rendered initially (in order to capture the fact that +/// those resources are read under the suspense), so you cannot assume that resources have +/// `Some` value in `children`. +/// +/// ``` +/// # use leptos_reactive::*; +/// # use leptos_core::*; +/// # use leptos_macro::*; +/// # use leptos_dom::*; use leptos::*; +/// # run_scope(create_runtime(), |cx| { +/// # if cfg!(not(any(feature = "csr", feature = "hydrate", feature = "ssr"))) { +/// async fn fetch_cats(how_many: u32) -> Result, ()> { Ok(vec![]) } +/// +/// let (cat_count, set_cat_count) = create_signal::(cx, 1); +/// let (pending, set_pending) = create_signal(cx, false); +/// +/// let cats = create_resource(cx, cat_count, |count| fetch_cats(count)); +/// +/// view! { cx, +///
+/// +/// {move || { +/// cats.read().map(|data| match data { +/// Err(_) => view! { cx,
"Error"
}, +/// Ok(cats) => view! { cx, +///
{ +/// cats.iter() +/// .map(|src| { +/// view! { cx, +/// +/// } +/// }) +/// .collect::>() +/// }
+/// }, +/// }) +/// } +/// } +///
+///
+/// }; +/// # } +/// # }); +/// ``` +#[allow(non_snake_case)] +pub fn Transition(cx: Scope, props: TransitionProps) -> impl Fn() -> Child +where + F: IntoChild + Clone, + E: IntoChild, + G: Fn() -> E + 'static, +{ + let context = SuspenseContext::new(cx); + + // provide this SuspenseContext to any resources below it + provide_context(cx, context); + + let child = (props.children)().swap_remove(0); + + render_transition(cx, context, props.fallback, child, props.on_pending) +} + +#[cfg(any(feature = "csr", feature = "hydrate"))] +fn render_transition<'a, F, E, G>( + cx: Scope, + context: SuspenseContext, + fallback: F, + child: G, + on_pending: Option>, +) -> impl Fn() -> Child +where + F: IntoChild + Clone, + E: IntoChild, + G: Fn() -> E, +{ + use std::cell::{Cell, RefCell}; + + let has_rendered_once = Cell::new(false); + let prev_child = RefCell::new(Child::Null); + + move || { + if context.ready() { + has_rendered_once.set(true); + let current_child = (child)().into_child(cx); + *prev_child.borrow_mut() = current_child.clone(); + if let Some(pending) = &on_pending { + pending(false); + } + current_child + } else if has_rendered_once.get() { + if let Some(pending) = &on_pending { + pending(true); + } + prev_child.borrow().clone() + } else { + if let Some(pending) = &on_pending { + pending(true); + } + let fallback = fallback.clone().into_child(cx); + *prev_child.borrow_mut() = fallback.clone(); + fallback + } + } +} + +#[cfg(not(any(feature = "csr", feature = "hydrate")))] +fn render_transition<'a, F, E, G>( + cx: Scope, + context: SuspenseContext, + fallback: F, + orig_child: G, + on_pending: Option>, +) -> impl Fn() -> Child +where + F: IntoChild + Clone, + E: IntoChild, + G: Fn() -> E + 'static, +{ + use leptos_dom::IntoAttribute; + use leptos_macro::view; + + _ = on_pending; + + let initial = { + // run the child; we'll probably throw this away, but it will register resource reads + let mut child = orig_child().into_child(cx); + while let Child::Fn(f) = child { + child = (f.borrow_mut())(); + } + + // no resources were read under this, so just return the child + if context.pending_resources.get() == 0 { + child + } + // show the fallback, but also prepare to stream HTML + else { + let key = cx.current_fragment_key(); + cx.register_suspense(context, &key, move || { + orig_child().into_child(cx).as_child_string() + }); + + // return the fallback for now, wrapped in fragment identifer + Child::Node(view! { cx,
{fallback.into_child(cx)}
}) + } + }; + move || initial.clone() +} From f18a7b35f2697fd6032262cd43c8b20c2256114c Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Wed, 30 Nov 2022 11:36:50 -0500 Subject: [PATCH 4/8] Use `SignalSetter` in `` API --- leptos_core/src/transition.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/leptos_core/src/transition.rs b/leptos_core/src/transition.rs index 6a04b6c4a..2cb02b571 100644 --- a/leptos_core/src/transition.rs +++ b/leptos_core/src/transition.rs @@ -1,5 +1,5 @@ use leptos_dom::{Child, IntoChild}; -use leptos_reactive::{provide_context, Scope, SuspenseContext}; +use leptos_reactive::{provide_context, Scope, SignalSetter, SuspenseContext}; use typed_builder::TypedBuilder; /// Props for the [Suspense](crate::Suspense) component, which shows a fallback @@ -17,7 +17,7 @@ where /// the `pending` state, with its argument indicating whether it is pending (`true`) /// or not pending (`false`). #[builder(default, setter(strip_option, into))] - pub on_pending: Option>, + pub set_pending: Option>, /// Will be displayed once all resources have resolved. pub children: Box Vec>, } @@ -49,7 +49,7 @@ where ///
/// /// {move || { /// cats.read().map(|data| match data { @@ -88,7 +88,7 @@ where let child = (props.children)().swap_remove(0); - render_transition(cx, context, props.fallback, child, props.on_pending) + render_transition(cx, context, props.fallback, child, props.set_pending) } #[cfg(any(feature = "csr", feature = "hydrate"))] @@ -97,7 +97,7 @@ fn render_transition<'a, F, E, G>( context: SuspenseContext, fallback: F, child: G, - on_pending: Option>, + set_pending: Option>, ) -> impl Fn() -> Child where F: IntoChild + Clone, @@ -114,18 +114,18 @@ where has_rendered_once.set(true); let current_child = (child)().into_child(cx); *prev_child.borrow_mut() = current_child.clone(); - if let Some(pending) = &on_pending { - pending(false); + if let Some(pending) = &set_pending { + pending.set(false); } current_child } else if has_rendered_once.get() { - if let Some(pending) = &on_pending { - pending(true); + if let Some(pending) = &set_pending { + pending.set(true); } prev_child.borrow().clone() } else { - if let Some(pending) = &on_pending { - pending(true); + if let Some(pending) = &set_pending { + pending.set(true); } let fallback = fallback.clone().into_child(cx); *prev_child.borrow_mut() = fallback.clone(); @@ -140,7 +140,7 @@ fn render_transition<'a, F, E, G>( context: SuspenseContext, fallback: F, orig_child: G, - on_pending: Option>, + set_pending: Option>, ) -> impl Fn() -> Child where F: IntoChild + Clone, @@ -150,7 +150,7 @@ where use leptos_dom::IntoAttribute; use leptos_macro::view; - _ = on_pending; + _ = set_pending; let initial = { // run the child; we'll probably throw this away, but it will register resource reads From db8c393f499e1ad2b2697d983788a7744441ff7d Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Wed, 30 Nov 2022 11:36:54 -0500 Subject: [PATCH 5/8] Update examples --- examples/fetch/src/lib.rs | 2 +- examples/hackernews/src/routes/stories.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/examples/fetch/src/lib.rs b/examples/fetch/src/lib.rs index ab726bddb..95535e892 100644 --- a/examples/fetch/src/lib.rs +++ b/examples/fetch/src/lib.rs @@ -57,7 +57,7 @@ pub fn fetch_example(cx: Scope) -> web_sys::Element { // Switch the to to fall back to "Loading..." every time {move || { cats.read().map(|data| match data { diff --git a/examples/hackernews/src/routes/stories.rs b/examples/hackernews/src/routes/stories.rs index 06e0f61d6..895f3b31d 100644 --- a/examples/hackernews/src/routes/stories.rs +++ b/examples/hackernews/src/routes/stories.rs @@ -35,8 +35,10 @@ pub fn Stories(cx: Scope) -> Element { api::fetch_api::>(cx, &api::story(&path)).await }, ); + let (pending, set_pending) = create_signal(cx, false); - let hide_more_link = move || stories.read().unwrap_or(None).unwrap_or_default().len() < 28; + let hide_more_link = + move || pending() || stories.read().unwrap_or(None).unwrap_or_default().len() < 28; view! { cx, @@ -76,7 +78,10 @@ pub fn Stories(cx: Scope) -> Element {
- "Loading..."

}> + "Loading..."

} + set_pending + > {move || match stories.read() { None => None, Some(None) => Some(view! { cx,

"Error loading stories."

}), @@ -94,7 +99,7 @@ pub fn Stories(cx: Scope) -> Element { }) } }} -
+
From be96a230ee5b9ee5bc4643fa475a683c15e66790 Mon Sep 17 00:00:00 2001 From: Vytenis Date: Thu, 1 Dec 2022 01:47:54 +0200 Subject: [PATCH 6/8] Update lib.rs --- examples/router/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/router/src/lib.rs b/examples/router/src/lib.rs index 17e5c0ecb..a922a1b13 100644 --- a/examples/router/src/lib.rs +++ b/examples/router/src/lib.rs @@ -143,7 +143,7 @@ pub fn Settings(_cx: Scope) -> Element {
"Name" - +
"This page is just a placeholder."
From 8ec772a129c49e8bd06ec6305f5ba5184bc91337 Mon Sep 17 00:00:00 2001 From: indrazar Date: Wed, 30 Nov 2022 22:57:16 -0500 Subject: [PATCH 7/8] update functions for Windows file directories - leptos_macro/src/server.rs server_macro_impl - integrations/axum/src/lib.rs handle_server_fns --- integrations/axum/src/lib.rs | 6 +++++- leptos_macro/src/server.rs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index cb13f9c76..0e233b6ae 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -46,7 +46,11 @@ pub async fn handle_server_fns( // req: Request, ) -> impl IntoResponse { // Axum Path extractor doesn't remove the first slash from the path, while Actix does - let fn_name = fn_name.replace("/", ""); + let fn_name: String = match fn_name.strip_prefix("/") { + Some(path) => path.to_string(), + None => fn_name, + }; + println!("landed at handle_server_fns, looking for {fn_name}"); println!("Body: {:#?}", &body); let (tx, rx) = futures::channel::oneshot::channel(); diff --git a/leptos_macro/src/server.rs b/leptos_macro/src/server.rs index 7ecfb7d24..cbc158bb6 100644 --- a/leptos_macro/src/server.rs +++ b/leptos_macro/src/server.rs @@ -46,7 +46,10 @@ pub fn server_macro_impl(args: proc_macro::TokenStream, s: TokenStream2) -> Resu if #[cfg(not(feature = "stable"))] { use proc_macro::Span; let span = Span::call_site(); + #[cfg(not(target_os = "windows"))] let url = format!("{}/{}", span.source_file().path().to_string_lossy(), fn_name_as_str).replace("/", "-"); + #[cfg(target_os = "windows")] + let url = format!("{}/{}", span.source_file().path().to_string_lossy(), fn_name_as_str).replace("\\", "-"); } else { let url = fn_name_as_str; } From cedc68c341d0194b46c9002cfa40a1907cb331fa Mon Sep 17 00:00:00 2001 From: IcosaHedron <110272232+Indrazar@users.noreply.github.com> Date: Wed, 30 Nov 2022 23:20:14 -0500 Subject: [PATCH 8/8] remove debug string from axum integration --- integrations/axum/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index 0e233b6ae..2c57043a7 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -50,7 +50,6 @@ pub async fn handle_server_fns( Some(path) => path.to_string(), None => fn_name, }; - println!("landed at handle_server_fns, looking for {fn_name}"); println!("Body: {:#?}", &body); let (tx, rx) = futures::channel::oneshot::channel();