10#include <userver/clients/http/config.hpp>
11#include <userver/clients/http/response.hpp>
12#include <userver/compiler/select.hpp>
13#include <userver/engine/deadline.hpp>
14#include <userver/engine/future.hpp>
15#include <userver/engine/impl/context_accessor.hpp>
16#include <userver/utils/impl/source_location.hpp>
18USERVER_NAMESPACE_BEGIN
20namespace clients::http {
30class ResponseFuture
final {
32 ResponseFuture(ResponseFuture&& other)
noexcept;
33 ResponseFuture& operator=(ResponseFuture&&)
noexcept;
34 ResponseFuture(
const ResponseFuture&) =
delete;
35 ResponseFuture& operator=(
const ResponseFuture&) =
delete;
48 std::future_status
Wait(
utils::impl::SourceLocation location =
utils::impl::SourceLocation::Current());
51 std::shared_ptr<Response>
Get(
utils::impl::SourceLocation location =
utils::impl::SourceLocation::Current());
53 void SetCancellationPolicy(CancellationPolicy cp);
57 engine::impl::ContextAccessor* TryGetContextAccessor()
noexcept;
59 ResponseFuture(engine::Future<std::shared_ptr<Response>>&& future, std::shared_ptr<RequestState> request);
63 void CancelOrDetach();
65 engine::Future<std::shared_ptr<Response>> future_;
66 engine::Deadline deadline_;
67 std::shared_ptr<RequestState> request_state_;
68 bool was_deadline_propagated_{
false};
69 CancellationPolicy cancellation_policy_;