tower::Service traitについての公式のGuideがとてもがとてもわかりやすかったです。 そこで本記事ではこれを辿りながらtower::Serviceがなにを抽象化しようとしているかの理解を試みます。(libraryのAPIがどうして今のsignatureに至ったのかをここまで丁寧に一歩ずつ解説してくれているのはなかなか見られないのではないでしょうか) versionは現時点の最新版(0.4.13)を対象にしています。 axumやtonicを動かす際にmiddlewareを追加しようとするとtower::Layerやtower::Service traitがでてくるかと思います。 例えば、gRPC serverを実行する以下のようなコードです。 fn trace_layer() -> tower_http::trace::TraceLayer { todo!() } ton