dioxus_query/
lib.rs

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