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/compiler/impl/lifetime.hpp>
7#include <userver/storages/redis/parse_reply.hpp>
8#include <userver/storages/redis/reply.hpp>
9#include <userver/storages/redis/request.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace storages::redis {
14
15/// @brief Redis future for EVAL responses.
16template <typename ScriptResult, typename ReplyType = ScriptResult>
17class [[nodiscard]] RequestEval final {
18public:
19 explicit RequestEval(RequestEvalCommon&& request)
20 : request_(std::move(request))
21 {}
22
23 /// Wait for the request to finish on Redis server
24 void Wait() { request_.Wait(); }
25
26 /// Ignore the query result and do not wait for the Redis server to finish executing it
27 void IgnoreResult() const { request_.IgnoreResult(); }
28
29 /// Wait for the request to finish on Redis server and get the result
30 ReplyType Get(const std::string& request_description = {}) {
31 return impl::ParseReply<ScriptResult, ReplyType>(request_.GetRaw(), request_description);
32 }
33
34 /// Satisfies @ref engine::Awaitable, for use with @ref engine::WaitAnyContext and friends.
35 engine::AwaitableToken GetAwaitableToken() noexcept USERVER_IMPL_LIFETIME_BOUND {
36 return request_.GetAwaitableToken();
37 }
38
39private:
40 RequestEvalCommon request_;
41};
42
43} // namespace storages::redis
44
45USERVER_NAMESPACE_END