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");
}