userver: userver/clients/http/response_future.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
response_future.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/clients/http/response_future.hpp
4/// @brief @copybrief clients::http::ResponseFuture
5
6#include <future>
7#include <memory>
8#include <type_traits>
9
10#include <userver/clients/http/response.hpp>
11#include <userver/compiler/select.hpp>
12#include <userver/engine/deadline.hpp>
13#include <userver/engine/future.hpp>
14#include <userver/engine/impl/context_accessor.hpp>
15
16USERVER_NAMESPACE_BEGIN
17
18namespace clients::http {
19
20class RequestState;
21
22namespace impl {
23class EasyWrapper;
24} // namespace impl
25
26/// @brief Allows to perform a request concurrently with other work without
27/// creating an extra coroutine for waiting.
28class ResponseFuture final {
29 public:
30 ResponseFuture(ResponseFuture&& other) noexcept;
31 ResponseFuture& operator=(ResponseFuture&&) noexcept;
32 ResponseFuture(const ResponseFuture&) = delete;
33 ResponseFuture& operator=(const ResponseFuture&) = delete;
34 ~ResponseFuture();
35
36 void Cancel();
37
38 void Detach();
39
40 std::future_status Wait();
41
42 std::shared_ptr<Response> Get();
43
44 /// @cond
45 /// Internal helper for WaitAny/WaitAll
46 engine::impl::ContextAccessor* TryGetContextAccessor() noexcept;
47
48 ResponseFuture(engine::Future<std::shared_ptr<Response>>&& future,
49 std::shared_ptr<RequestState> request);
50 /// @endcond
51
52 private:
53 engine::Future<std::shared_ptr<Response>> future_;
54 engine::Deadline deadline_;
55 std::shared_ptr<RequestState> request_state_;
56 bool was_deadline_propagated_{false};
57};
58
59} // namespace clients::http
60
61USERVER_NAMESPACE_END