userver: userver/storages/redis/reply_types.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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#include <userver/utils/void_t.hpp>
13
14#include <userver/storages/redis/key_type.hpp>
15#include <userver/storages/redis/reply_fwd.hpp>
16#include <userver/storages/redis/scan_tag.hpp>
17
18USERVER_NAMESPACE_BEGIN
19
20namespace storages::redis {
21
22enum class HsetReply { kCreated, kUpdated };
23
24struct Point {
25 double lon;
26 double lat;
27
28 bool operator==(const Point& rhs) const { return std::tie(lon, lat) == std::tie(rhs.lon, rhs.lat); }
29};
30
31struct GeoPoint final {
32 std::string member;
33 std::optional<double> dist;
34 std::optional<uint64_t> hash;
35 std::optional<Point> point;
36
37 GeoPoint() = default;
38
39 GeoPoint(std::string member, std::optional<double> dist, std::optional<uint64_t> hash, std::optional<Point> point)
40 : member(std::move(member)), dist(dist), hash(hash), point(point) {}
41
42 bool operator==(const GeoPoint& rhs) const {
43 return std::tie(member, dist, hash, point) == std::tie(rhs.member, rhs.dist, rhs.hash, rhs.point);
44 }
45
46 bool operator!=(const GeoPoint& rhs) const { return !(*this == rhs); }
47};
48
49/// @brief Data type that holds `member` and `score`.
50///
51/// Sample usage:
52/// @snippet redis/src/storages/redis/client_scan_redistest.cpp Sample Zscan usage
53struct MemberScore final {
54 std::string member;
55 double score{0.0};
56
57 MemberScore() = default;
58 MemberScore(std::string member, double score) : member(std::move(member)), score(score) {}
59
60 operator std::pair<std::string, double>() const& { return {member, score}; }
61
62 operator std::pair<std::string, double>() && { return {std::move(member), score}; }
63
64 operator std::pair<const std::string, double>() const& { return {member, score}; }
65
66 operator std::pair<const std::string, double>() && { return {std::move(member), score}; }
67
68 bool operator==(const MemberScore& rhs) const { return member == rhs.member && score == rhs.score; }
69
70 bool operator!=(const MemberScore& rhs) const { return !(*this == rhs); }
71};
72
73enum class PersistReply { kKeyOrTimeoutNotFound, kTimeoutRemoved };
74
75template <ScanTag>
76struct ScanReplyElem;
77
78template <>
79struct ScanReplyElem<ScanTag::kScan> {
80 using type = std::string;
81};
82
83template <>
84struct ScanReplyElem<ScanTag::kSscan> {
85 using type = std::string;
86};
87
88template <>
89struct ScanReplyElem<ScanTag::kHscan> {
90 using type = std::pair<std::string, std::string>;
91};
92
93template <>
94struct ScanReplyElem<ScanTag::kZscan> {
95 using type = MemberScore;
96};
97
98enum class SetReply { kSet, kNotSet };
99
100enum class StatusOk { kOk };
101
102enum class StatusPong { kPong };
103
104} // namespace storages::redis
105
106USERVER_NAMESPACE_END