userver: userver/storages/redis/reply_types.hpp Source File
Loading...
Searching...
No Matches
reply_types.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file
4/// @brief Definitions of structures representing different Redis replies.
5
6#include <string>
7#include <vector>
8
9#include <userver/storages/redis/base.hpp>
10#include <userver/storages/redis/expire_reply.hpp>
11#include <userver/storages/redis/ttl_reply.hpp>
12
13#include <userver/storages/redis/key_type.hpp>
14#include <userver/storages/redis/reply_fwd.hpp>
15#include <userver/storages/redis/scan_tag.hpp>
16
17USERVER_NAMESPACE_BEGIN
18
19namespace storages::redis {
20
21enum class HsetReply { kCreated, kUpdated };
22
23struct Point {
24 double lon;
25 double lat;
26
27 bool operator==(const Point& rhs) const { return std::tie(lon, lat) == std::tie(rhs.lon, rhs.lat); }
28};
29
30struct GeoPoint final {
31 std::string member;
32 std::optional<double> dist;
33 std::optional<uint64_t> hash;
34 std::optional<Point> point;
35
36 GeoPoint() = default;
37
38 GeoPoint(std::string member, std::optional<double> dist, std::optional<uint64_t> hash, std::optional<Point> point)
39 : member(std::move(member)),
40 dist(dist),
41 hash(hash),
42 point(point)
43 {}
44
45 bool operator==(const GeoPoint& rhs) const {
46 return std::tie(member, dist, hash, point) == std::tie(rhs.member, rhs.dist, rhs.hash, rhs.point);
47 }
48};
49
50/// @brief Data type that holds `member` and `score`.
51///
52/// Sample usage:
53/// @snippet redis/src/storages/redis/client_scan_redistest.cpp Sample Zscan usage
54struct MemberScore final {
55 std::string member;
56 double score{0.0};
57
58 MemberScore() = default;
59 MemberScore(std::string member, double score)
60 : member(std::move(member)),
61 score(score)
62 {}
63
64 operator std::pair<std::string, double>() const& { return {member, score}; }
65
66 operator std::pair<std::string, double>() && { return {std::move(member), score}; }
67
68 operator std::pair<const std::string, double>() const& { return {member, score}; }
69
70 operator std::pair<const std::string, double>() && { return {std::move(member), score}; }
71
72 bool operator==(const MemberScore& rhs) const { return member == rhs.member && score == rhs.score; }
73};
74
75enum class PersistReply { kKeyOrTimeoutNotFound, kTimeoutRemoved };
76
77template <ScanTag>
78struct ScanReplyElem;
79
80template <>
81struct ScanReplyElem<ScanTag::kScan> {
82 using type = std::string;
83};
84
85template <>
86struct ScanReplyElem<ScanTag::kSscan> {
87 using type = std::string;
88};
89
90template <>
91struct ScanReplyElem<ScanTag::kHscan> {
92 using type = std::pair<std::string, std::string>;
93};
94
95template <>
96struct ScanReplyElem<ScanTag::kZscan> {
97 using type = MemberScore;
98};
99
100enum class SetReply { kSet, kNotSet };
101
102enum class StatusOk { kOk };
103
104enum class StatusPong { kPong };
105
106} // namespace storages::redis
107
108USERVER_NAMESPACE_END