userver: userver/storages/redis/request_eval.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
request_eval.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file
4/// @brief @copybrief storages::redis::RequestEval
5
6#include <userver/storages/redis/parse_reply.hpp>
7#include <userver/storages/redis/reply.hpp>
8#include <userver/storages/redis/request.hpp>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace storages::redis {
13
14/// @brief Redis future for EVAL responses.
15template <typename ScriptResult, typename ReplyType = ScriptResult>
16class [[nodiscard]] RequestEval final {
17public:
18 explicit RequestEval(RequestEvalCommon&& request) : request_(std::move(request)) {}
19
20 /// Wait for the request to finish on Redis server
21 void Wait() { request_.Wait(); }
22
23 /// Ignore the query result and do not wait for the Redis server to finish executing it
24 void IgnoreResult() const { request_.IgnoreResult(); }
25
26 /// Wait for the request to finish on Redis server and get the result
27 ReplyType Get(const std::string& request_description = {}) {
28 return impl::ParseReply<ScriptResult, ReplyType>(request_.GetRaw(), request_description);
29 }
30
31 /// @cond
32 /// Internal helper for WaitAny/WaitAll
33 engine::impl::ContextAccessor* TryGetContextAccessor() noexcept { return request_.TryGetContextAccessor(); }
34 /// @endcond
35
36private:
37 RequestEvalCommon request_;
38};
39
40} // namespace storages::redis
41
42USERVER_NAMESPACE_END