use dioxus_lib::prelude::use_hook;
use serde::{de::DeserializeOwned, Serialize};
pub fn use_server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
server_fn: impl Fn() -> O,
) -> O {
use_hook(|| server_cached(server_fn))
}
pub(crate) fn server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
value: impl FnOnce() -> O,
) -> O {
#[cfg(feature = "server")]
{
let serialize = crate::html_storage::serialize_context();
let data = value();
serialize.push(&data);
data
}
#[cfg(all(not(feature = "server"), feature = "web"))]
{
dioxus_web::take_server_data()
.ok()
.flatten()
.unwrap_or_else(value)
}
#[cfg(not(any(feature = "server", feature = "web")))]
{
value()
}
}