dioxus_use_request/
use_request.rs1use dioxus::core::ScopeState;
2use dioxus::hooks::{use_future, UseFutureDep};
3use reqwest::IntoUrl;
4use serde::de::DeserializeOwned;
5
6pub fn use_request<'a, D, U, R>(cx: &'a ScopeState, dependencies: D, url: U) -> RequestResult<&R>
7where
8 D: UseFutureDep,
9 U: 'static + IntoUrl,
10 R: 'static + DeserializeOwned,
11{
12 use_future(cx, dependencies, |_| async move {
13 reqwest::get(url).await.unwrap().json::<R>().await
14 })
15 .value()
16 .into()
17}
18
19type Error = reqwest::Error;
20
21pub use RequestResult::*;
22pub enum RequestResult<'a, T> {
23 Success(T),
24 Failure(&'a Error),
25 Loading,
26}
27
28impl<'a, T> From<Option<&'a Result<T, Error>>> for RequestResult<'a, &'a T> {
29 fn from(result: Option<&'a Result<T, Error>>) -> Self {
30 match result {
31 Some(Ok(val)) => Success(val),
32 Some(Err(err)) => Failure(err),
33 None => Loading,
34 }
35 }
36}