userver: userver/storages/redis/request_eval.hpp Source File
Loading...
Searching...
No Matches
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)
19 : request_(std::move(request))
20 {}
21
22 /// Wait for the request to finish on Redis server
23 void Wait() { request_.Wait(); }
24
25 /// Ignore the query result and do not wait for the Redis server to finish executing it
26 void IgnoreResult() const { request_.IgnoreResult(); }
27
28 /// Wait for the request to finish on Redis server and get the result
29 ReplyType Get(const std::string& request_description = {}) {
30 return impl::ParseReply<ScriptResult, ReplyType>(request_.GetRaw(), request_description);
31 }
32
33 /// @cond
34 /// Internal helper for WaitAny/WaitAll
35 engine::impl::ContextAccessor* TryGetContextAccessor() noexcept { return request_.TryGetContextAccessor(); }
36 /// @endcond
37
38private:
39 RequestEvalCommon request_;
40};
41
42} // namespace storages::redis
43
44USERVER_NAMESPACE_END