json/
json.rs

1use std::time::Duration;
2
3use bevy::{log::LogPlugin, prelude::*, time::common_conditions::on_timer};
4use bevy_mod_reqwest::*;
5use serde::Deserialize;
6
7#[derive(Deserialize, Debug)]
8pub struct Bored {
9    pub activity: String,
10    pub price: f32,
11    pub participants: f32,
12}
13
14fn send_requests(mut client: BevyReqwest) {
15    let url = "https://bored-api.appbrewery.com/random";
16
17    // use regular reqwest http calls, then poll them to completion.
18    let reqwest_request = client.get(url).build().unwrap();
19
20    client
21        // Sends the created http request
22        .send(reqwest_request)
23        // The response from the http request can be reached using an observersystem
24        .on_json_response(|trigger: On<JsonResponse<Bored>>| {
25            let data: &Bored = &trigger.event().data;
26            // let headers = req.response_headers();
27            bevy::log::info!("data: {data:?}");
28        })
29        // In case of request error, it can be reached using an observersystem
30        .on_error(|trigger: On<ReqwestErrorEvent>| {
31            let e = &trigger.event().error;
32            bevy::log::info!("error: {e:?}");
33        });
34}
35
36fn main() {
37    App::new()
38        .add_plugins(MinimalPlugins)
39        .add_plugins(LogPlugin::default())
40        .add_plugins(ReqwestPlugin::default())
41        .add_systems(
42            Update,
43            send_requests.run_if(on_timer(Duration::from_secs(5))),
44        )
45        .run();
46}