dioxus_fullstack/hooks/
server_cached.rs1use dioxus_lib::prelude::use_hook;
2use serde::{de::DeserializeOwned, Serialize};
3
4#[track_caller]
24pub fn use_server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
25 server_fn: impl Fn() -> O,
26) -> O {
27 let location = std::panic::Location::caller();
28 use_hook(|| server_cached(server_fn, location))
29}
30
31pub(crate) fn server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
32 value: impl FnOnce() -> O,
33 #[allow(unused)] location: &'static std::panic::Location<'static>,
34) -> O {
35 #[cfg(feature = "server")]
36 {
37 let serialize = crate::html_storage::serialize_context();
38 let data = value();
39 serialize.push(&data, location);
40 data
41 }
42 #[cfg(all(not(feature = "server"), feature = "web"))]
43 {
44 dioxus_web::take_server_data()
45 .ok()
46 .flatten()
47 .unwrap_or_else(value)
48 }
49 #[cfg(not(any(feature = "server", feature = "web")))]
50 {
51 value()
52 }
53}