dioxus_use_request/
use_request.rs

1use 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}