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