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
Clonefor concurrent usage - All types must be
Sendfor 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.
- Adapter
Layer - Layer adapter that applies Tower layers to layered services.
Functions§
- tower_
layer - Wraps a Tower layer for use with layered services.