Crate tower_reqwest

Crate tower_reqwest 

Source
Expand description

§Overview

This library provides adapters to use reqwest client with the tower_http layers.

§Example

use http::{header::USER_AGENT, HeaderValue};
use http_body_util::BodyExt;
use serde_json::{json, Value};
use tower::{Service, ServiceBuilder};
use tower_http::ServiceBuilderExt;
use tower_reqwest::HttpClientLayer;
use wiremock::{matchers, Mock, MockServer, ResponseTemplate};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let mock_server = MockServer::start().await;
    let mock_uri = mock_server.uri();

    // Create a mock server that will respond to a GET request on `/test`.
    Mock::given(matchers::method("GET"))
        .and(matchers::path("/hello"))
        .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "value": "Hello world" })))
        .mount(&mock_server)
        .await;

    let mut client = ServiceBuilder::new()
        // Add some layers.
        .override_request_header(USER_AGENT, HeaderValue::from_static("tower-reqwest"))
        // Make client compatible with the `tower-http` layers.
        .layer(HttpClientLayer)
        .service(reqwest::Client::new());
    // Execute request by using this service.
    let response = client
        .call(
            http::request::Builder::new()
                .method(http::Method::GET)
                .uri(format!("{mock_uri}/hello"))
                .body(reqwest::Body::default())?,
        )
        .await?;

    let bytes = response.into_body().collect().await?.to_bytes();
    let value: Value = serde_json::from_slice(&bytes)?;
    println!("{value:#?}");

    Ok(())
}

Modules§

authauth
Middleware for adding Authorization header to requests.
error
When something went wrong.
set_headerset-header
Middleware for setting headers on requests.

Structs§

HttpClientLayer
Layer that creates HttpClientService from the inner service.
HttpClientService
Adapter type to creating Tower HTTP services from the various clients.

Enums§

Error
This type represent all possible errors that can occurs during the request processing.

Functions§

into_reqwest_body
Converts an arbitrary body type into the reqwest::Body one.

Type Aliases§

Result
Alias for a Result with the error type crate::Error.