reqwew

Crates.ioreqwew
lib.rsreqwew
version0.6.0
sourcesrc
created_at2024-06-11 19:42:49.337947
updated_at2024-11-15 18:09:17.296515
descriptionReqwest effortless wrapper.
homepagehttps://hack.ink/reqwew
repositoryhttps://github.com/hack-ink/reqwew
max_upload_size
id1268859
size53,662
Xavier Lau (AurevoirXavier)

documentation

README

reqwew

HTTP client effortless wrapper.

License Checks Release GitHub tag (latest by date) GitHub code lines GitHub last commit

At the beginning, the goal was to create an easy-to-use wrapper for reqwest.

Now it has evolved into a more generic solution, allowing you to implement the HTTP trait for any client to enjoy the handy features provided by reqwew.

Usage

Async

// std
use std::sync::LazyLock;
// crates.io
use reqwew::{reqwest::Client, Http, Response};
use serde_json::Value;

// Lazy static.
pub static CLIENT: LazyLock<Client> = reqwew::lazy(|| Client::default());

// Async.
let resp = CLIENT
	.request_with_retries(
		CLIENT.request(Method::GET, "https://httpbin.org/get").build().unwrap(),
		3,
		50,
	)
	.await
	.unwrap();

assert!(resp.clone().text().contains("httpbin.org"));
assert_eq!(resp.json::<Value>().unwrap()["headers"]["Host"].as_str().unwrap(), "httpbin.org");

let resp = CLIENT
	.request_with_retries(
		CLIENT.request(Method::POST, "https://httpbin.org/post").body("hello").build().unwrap(),
		3,
		50,
	)
	.await
	.unwrap();

assert!(resp.clone().text().contains("https://httpbin.org/post"));
assert_eq!(resp.json::<Value>().unwrap()["url"].as_str().unwrap(), "https://httpbin.org/post");

Blocking

// std
use std::sync::LazyLock;
// crates.io
use reqwew::{
	blocking::Http as BlockingHttp, reqwest::blocking::Client as BlockingClient, Response,
};
use serde_json::Value;

// Lazy static.
pub static BLOCKING_CLIENT: LazyLock<BlockingClient> = reqwew::lazy(|| BlockingClient::default());

// Blocking.
let resp = BLOCKING_CLIENT
	.request_with_retries(
		BLOCKING_CLIENT.request(Method::GET, "https://httpbin.org/get").build().unwrap(),
		3,
		50,
	)
	.unwrap();

assert!(resp.clone().text().contains("httpbin.org"));
assert_eq!(resp.json::<Value>().unwrap()["headers"]["Host"].as_str().unwrap(), "httpbin.org");

let resp = BLOCKING_CLIENT
	.request_with_retries(
		BLOCKING_CLIENT
			.request(Method::POST, "https://httpbin.org/post")
			.body("hello")
			.build()
			.unwrap(),
		3,
		50,
	)
	.unwrap();

assert!(resp.clone().text().contains("https://httpbin.org/post"));
assert_eq!(resp.json::<Value>().unwrap()["url"].as_str().unwrap(), "https://httpbin.org/post");
Commit count: 32

cargo fmt