1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//! # dioxus-query
//! **Fully-typed, async, reusable state management and synchronization** for [Dioxus 🧬](https://dioxuslabs.com/).
//! ## Usage
//!
//! ```rust
//! #[derive(Clone, PartialEq, Eq, Hash)]
//! enum QueryKeys {
//!     User(usize),
//! }
//!
//! #[derive(Clone, PartialEq, Eq, Hash, Debug)]
//! enum QueryError {
//!     UserNotFound(usize),
//!     Unknown
//! }
//!
//! #[derive(Clone, PartialEq, Eq, Hash, Debug)]
//! enum QueryValue {
//!     UserName(String),
//! }
//!
//! async fn fetch_user(keys: Vec<QueryKeys>) -> QueryResult<QueryValue, QueryError> {
//!     if let Some(QueryKeys::User(id)) = keys.first() {
//!         println!("Fetching user {id}");
//!         sleep(Duration::from_millis(1000)).await;
//!         match id {
//!             0 => Ok(QueryValue::UserName("Marc".to_string())),
//!             _ => Err(QueryError::UserNotFound(*id)),
//!         }
//!         .into()
//!     } else {
//!         QueryResult::Err(QueryError::Unknown)
//!     }
//! }
//!
//! #[allow(non_snake_case)]
//! #[inline_props]
//! fn User(cx: Scope, id: usize) -> Element {
//!    let value = use_query(cx, || vec![QueryKeys::User(*id)], fetch_user);
//!
//!     render!( p { "{value.result().value():?}" } )
//! }
//!
//!
//! fn app(cx: Scope) -> Element {
//!     let client = use_query_client::<QueryValue, QueryError, QueryKeys>(cx);
//!
//!     let refresh = move |_| {
//!         to_owned![client];
//!         cx.spawn(async move {
//!             client.invalidate_query(QueryKeys::User(0)).await;
//!         });
//!     };
//!
//!     render!(
//!         User { id: 0 }
//!         button { onclick: refresh, label { "Refresh" } }
//!     )
//! }
//! ```
//!

mod cached_result;
mod result;
mod use_mutation;
mod use_query;
mod use_query_client;

pub mod prelude {
    pub use crate::cached_result::*;
    pub use crate::result::*;
    pub use crate::use_mutation::*;
    pub use crate::use_query::*;
    pub use crate::use_query_client::*;
    pub use futures_util;
}