37void OutputHeader(USERVER_NAMESPACE::
http::
headers::HeadersString& header, std::string_view key, std::string_view val);
46 using HeadersMap = USERVER_NAMESPACE::
http::
headers::HeaderMap;
48 using HeadersMapKeys =
decltype(utils::
impl::MakeKeysView(HeadersMap
()));
50 using CookiesMap = Cookie::CookiesMap;
52 using CookiesMapKeys =
decltype(utils::
impl::MakeKeysView(CookiesMap()));
55 HttpResponse(
const HttpRequest& request,
request::ResponseDataAccounter& data_accounter);
57 const HttpRequest& request,
58 request::ResponseDataAccounter& data_accounter,
59 std::chrono::steady_clock::time_point now,
62 ~HttpResponse()
override;
64 void SetSendFailed(std::chrono::steady_clock::time_point failure_time)
override;
71 bool SetHeader(std::string name, std::string value);
77 bool SetHeader(std::string_view name, std::string value);
120 const std::string&
GetHeader(std::string_view header_name)
const;
135 const Cookie&
GetCookie(std::string_view cookie_name)
const;
142 void SetStatusServiceUnavailable()
override {
SetStatus(HttpStatus::kServiceUnavailable
); }
143 void SetStatusOk()
override {
SetStatus(HttpStatus::kOk
); }
144 void SetStatusNotFound()
override {
SetStatus(HttpStatus::kNotFound
); }
146 bool WaitForHeadersEnd()
override;
147 void SetHeadersEnd()
override;
150 using Producer = std::variant<std::monostate, Queue::Producer, impl::Http2StreamEventProducer>;
152 void SetStreamBody();
153 bool IsBodyStreamed()
const override;
155 Producer GetBodyProducer();
158 friend class Http2ResponseWriter;
166 const HttpRequest& request_;
167 HttpStatus status_ = HttpStatus::kOk;
168 HeadersMap system_headers_;
169 HeadersMap user_headers_;
172 bool system_headers_ended_ =
false;
173 engine::SingleConsumerEvent headers_end_
{engine::SingleConsumerEvent::NoAutoReset()
};
174 std::optional<Queue::Consumer> body_stream_;
175 Producer body_stream_producer_;
176 bool is_stream_body_{
false};