userver: userver/storages/redis/request_data_base.hpp Source File
Loading...
Searching...
No Matches
request_data_base.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/storages/redis/request_data_base.hpp
4/// @brief Abstract bases for Redis request/scan pending results
5
6#include <string>
7
8#include <userver/compiler/impl/lifetime.hpp>
9#include <userver/engine/awaitable.hpp>
10#include <userver/storages/redis/reply_fwd.hpp>
11#include <userver/storages/redis/reply_types.hpp>
12#include <userver/storages/redis/scan_tag.hpp>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace storages::redis {
17
18// Mock note:
19// Request->
20// RequestDataBase
21//
22// RequestDataBase <- RequestDataImpl
23// RequestDataBase <- MockRequestDataBase <- UserMockRequestData
24
25template <typename ReplyType>
27public:
28 virtual ~RequestDataBase() = default;
29
30 virtual void Wait() = 0;
31
32 virtual ReplyType Get(const std::string& request_description) = 0;
33
34 virtual ReplyPtr GetRaw() = 0;
35
36 /// Satisfies @ref engine::Awaitable, for use with @ref engine::WaitAnyContext and friends.
37 virtual engine::AwaitableToken GetAwaitableToken() noexcept USERVER_IMPL_LIFETIME_BOUND = 0;
38};
39
40template <ScanTag TScanTag>
42public:
43 using ReplyElem = typename ScanReplyElem<TScanTag>::type;
44
45 virtual ~RequestScanDataBase() = default;
46
47 void SetRequestDescription(std::string request_description) {
48 request_description_ = std::move(request_description);
49 }
50
51 virtual ReplyElem Get() = 0;
52
53 virtual ReplyElem& Current() = 0;
54
55 virtual bool Eof() = 0;
56
57protected:
58 // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)
59 std::string request_description_;
60};
61
62} // namespace storages::redis
63
64USERVER_NAMESPACE_END