userver: userver/clients/http/response_future.hpp Source File
Loading...
Searching...
No Matches
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