Skip to main content

Module ecat

Module ecat 

Source
Expand description

e-cat 集成。

e-cat 的 HTTP 传输层是 axum,中间件层是 tower 的 Layer/Service, 用 tower::ServiceBuilder 组装。它没有自己的「中间件 trait」,所以这里 就是一个标准的 tower 层:把 Guard 塞进请求扩展,处理器用 Extension<Guard> 取出来。

use encryption::guard::Guard;
use encryption::integrations::ecat::GuardLayer;
use tower::ServiceBuilder;

let guard: Guard = todo!();
let middleware = ServiceBuilder::new().layer(GuardLayer::new(guard));

§为什么这不只是「给 e-cat 用的」

它是一个不依赖 e-cat 的普通 tower 层 —— e-cat 只是把它接进来的那个框架。 与 e-cat 自身的 ecat-middleware::ValidateLayer 是同一个形状,可以并排 放进同一个 ServiceBuilder。

§为什么不必装箱

这一层不改写响应、不改写错误,只是往请求里塞一个 Extension,所以 type Future = S::Future —— 直接透传内层的 future,没有 Pin<Box<dyn ...>>, 也没有 futures 依赖。

Structs§

GuardLayer
把 Guard 注入每个请求扩展的 tower 层。
GuardService
GuardLayer 产出的服务。