bevy_mod_reqwest 0.22.1

Bevy http client using reqwest, with a focus on simple usage within the bevy runtime
Documentation
#!/usr/bin/env -S cargo +nightly -Zscript
---cargo
[package]
edition = "2021"

[dependencies]
axum = "0.8"
serde_json = "1"
tokio = { version = "1", features = ["full"] }
tower-http = { version = "0.6", features = ["cors"] }
---

use axum::{
    extract::Json,
    routing::{get, post},
    Router,
};
use serde_json::{json, Value};
use tower_http::cors::CorsLayer;

#[tokio::main]
async fn main() {
    let addr = std::env::args()
        .nth(1)
        .unwrap_or_else(|| "127.0.0.1:8090".to_string());

    let app = Router::new()
        .route("/random", get(random))
        .route("/todos/1", get(random))
        .route("/get", get(random))
        .route("/posts", post(posts))
        .route("/post", post(posts))
        .layer(CorsLayer::permissive());

    println!("CORS test server listening on http://{addr}");
    let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

async fn random() -> Json<Value> {
    Json(json!({
        "activity": "Use the local bevy_mod_reqwest CORS test server",
        "availability": 1.0,
        "type": "education",
        "participants": 1,
        "price": 0.0,
        "accessibility": "Few to no challenges",
        "duration": "minutes",
        "kidFriendly": true,
        "link": "",
        "key": "local-test"
    }))
}

async fn posts(Json(mut payload): Json<Value>) -> Json<Value> {
    match &mut payload {
        Value::Object(object) => {
            object.insert("id".to_string(), json!(101));
            Json(payload)
        }
        _ => Json(json!({ "body": payload, "id": 101 })),
    }
}