Skip to content
This repository was archived by the owner on Oct 17, 2025. It is now read-only.
hack-inkPublic archive

About

Reqwest effortless wrapper.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

51 Commits

Folders and files

Repository files navigation

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, Method},
	Http, Response,
};
use serde_json::Value;

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

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

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

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

assert!(req().await.text().await.unwrap().contains("https://httpbin.org/post"));
assert_eq!(
	req().await.json::<Value>().await.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, Method},
	Response,
};
use serde_json::Value;

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

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

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

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

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

About

Reqwest effortless wrapper.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

Generated from acg-box/vibe-mono