1mod hooks;
2
3use async_trait::async_trait;
4
5#[cfg(feature = "cache")]
6use std::rc::Rc;
7#[cfg(feature = "cache")]
8use yewdux::store::Store;
9
10pub use hooks::*;
11
12pub mod prelude {
13 pub use crate::{hooks::*, Request};
14 pub use async_trait::async_trait;
15
16 #[cfg(feature = "cache")]
17 pub use crate::CachableRequest;
18 #[cfg(feature = "cache")]
19 pub use std::rc::Rc;
20 #[cfg(feature = "cache")]
21 pub use yewdux::store::Store;
22}
23
24#[async_trait(?Send)]
27pub trait Request: std::fmt::Debug + PartialEq + Clone {
28 type Error: Clone + std::fmt::Debug + PartialEq + 'static;
30
31 type Output: Clone + std::fmt::Debug + PartialEq + 'static;
33
34 async fn run(&self) -> Result<Self::Output, Self::Error>;
37
38 fn store(_: Self::Output) {}
41}
42
43#[cfg(feature = "cache")]
45pub trait CachableRequest: Request {
46 type Store: Store + PartialEq;
48
49 fn load(&self, store: Rc<Self::Store>) -> Option<Self::Output>;
51}