id_effect_platform 0.3.0

Platform capability traits (HTTP, FS, process) for id_effect — @effect/platform-style boundaries
Documentation
//! [`id_effect_platform::http::reqwest::json`] with a typed response body.
//!
//! Run: `cargo run -p id_effect_platform --example 020_wiremock_json`

use id_effect::build_env;
use id_effect::run_async;
use id_effect_platform::http::reqwest::{json, provide_reqwest_client};
use reqwest::{Client, Error};
use serde::{Deserialize, Serialize};
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};

#[derive(Debug, Deserialize, Serialize, PartialEq)]
struct Msg {
  n: i32,
}

#[tokio::main]
async fn main() {
  let server = MockServer::start().await;
  Mock::given(method("GET"))
    .and(path("/data"))
    .respond_with(ResponseTemplate::new(200).set_body_json(&Msg { n: 7 }))
    .mount(&server)
    .await;

  let url = format!("{}/data", server.uri());
  let env = build_env([provide_reqwest_client(Client::new())]).expect("env");
  let msg = run_async(json::<Msg, Error, _, _, Msg>(move |c| c.get(url)), env)
    .await
    .unwrap();
  assert_eq!(msg, Msg { n: 7 });
  println!("020_wiremock_json ok");
}