10#include <userver/utils/not_null.hpp> 
   12USERVER_NAMESPACE_BEGIN
 
   14namespace clients::
http {
 
   21class PluginRequest 
final {
 
   24  explicit PluginRequest(RequestState& state);
 
   27  void SetHeader(std::string_view name, std::string value);
 
   29  void SetTimeout(std::chrono::milliseconds ms);
 
   38  explicit Plugin(std::string name);
 
   40  virtual ~Plugin() = 
default;
 
   62  const std::string name_;
 
   67class PluginPipeline 
final {
 
   69  PluginPipeline(
const std::vector<utils::NotNull<Plugin*>>& plugins);
 
   71  void HookPerformRequest(RequestState& request);
 
   73  void HookCreateSpan(RequestState& request);
 
   75  void HookOnCompleted(RequestState& request, Response& response);
 
   78  const std::vector<utils::NotNull<Plugin*>> plugins_;