Module tower

Module tower 

Source
Available on crate features tower-service only.
Expand description

Tower interoperability for layered services.

Use Tower services and middleware with layered services through the Adapter type. Provides bidirectional conversion between Tower and layered service traits.

§Requirements

  • Services must be Clone for concurrent usage
  • All types must be Send for async compatibility
  • Layered services must return Result<T, E> when used with Tower
  • Tower’s back-pressure (poll_ready) is handled automatically

§Examples

Use a layered service with Tower middleware:

use std::time::Duration;

use layered::tower::Adapter;
use layered::{Execute, Service};
use tower::ServiceBuilder;

let service = Execute::new(|req: String| async move {
    Ok::<String, std::io::Error>(format!("Processed: {}", req))
});

let tower_service = ServiceBuilder::new().service(Adapter(service));

Use Tower layers in a layered stack:

use layered::tower::tower_layer;
use layered::{Execute, Service, Stack};
use tower_layer::Identity;

async fn example() -> Result<(), Box<dyn std::error::Error>> {
let service = (
    tower_layer(Identity::default()),
    Execute::new(|req: String| async move {
        Ok::<String, std::io::Error>(format!("Processed: {}", req))
    }),
).build();

let result = service.execute("request".to_string()).await;

Structs§

Adapter
Bidirectional adapter between layered and Tower service traits.
AdapterLayer
Layer adapter that applies Tower layers to layered services.

Functions§

tower_layer
Wraps a Tower layer for use with layered services.