reqx 0.1.35

Rust HTTP transport client for API SDK libraries with retry, timeout, idempotency, proxy, and pluggable TLS backends
Documentation
use std::time::Duration;

use reqx::prelude::{Client, RetryPolicy};
use serde::Serialize;
use serde_json::Value;

#[derive(Debug, Serialize)]
struct SearchQuery<'a> {
    term: &'a str,
    page: u32,
}

#[derive(Debug, Serialize)]
struct LoginForm<'a> {
    username: &'a str,
    password: &'a str,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::builder("https://postman-echo.com")
        .client_name("reqx-example-request-helpers")
        .request_timeout(Duration::from_secs(3))
        .retry_policy(RetryPolicy::disabled())
        .try_default_header("x-sdk-version", "1.0.0")?
        .build()?;

    let get_response: Value = client
        .get("/get")
        .query(&SearchQuery {
            term: "reqx",
            page: 2,
        })?
        .try_header("x-request-id", "req-001")?
        .send_json()
        .await?;
    println!("GET /get args={:?}", get_response.get("args"));

    let form_response: Value = client
        .post("/post")
        .form(&LoginForm {
            username: "alice",
            password: "secret",
        })?
        .send_json()
        .await?;
    println!("POST /post form={:?}", form_response.get("form"));

    Ok(())
}