1 /*
2  * Hunt - A redis client library for D programming language.
3  *
4  * Copyright (C) 2018-2019 HuntLabs
5  *
6  * Website: https://www.huntlabs.net/
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11  
12 module hunt.redis.commands.BinaryRedisCommands;
13 
14 import hunt.redis.BinaryRedisPubSub;
15 import hunt.redis.BitOP;
16 import hunt.redis.GeoCoordinate;
17 import hunt.redis.GeoRadiusResponse;
18 import hunt.redis.GeoUnit;
19 import hunt.redis.ListPosition;
20 import hunt.redis.params.GeoRadiusParam;
21 import hunt.redis.params.SetParams;
22 import hunt.redis.params.ZAddParams;
23 import hunt.redis.params.ZIncrByParams;
24 import hunt.redis.Protocol;
25 import hunt.redis.RedisPubSub;
26 import hunt.redis.ScanParams;
27 import hunt.redis.ScanResult;
28 import hunt.redis.SortingParams;
29 import hunt.redis.StreamEntry;
30 import hunt.redis.StreamEntryID;
31 import hunt.redis.Tuple;
32 import hunt.redis.ZParams;
33 
34 import hunt.collection.Collection;
35 import hunt.collection.List;
36 import hunt.collection.Map;
37 import hunt.collection.Set;
38 
39 import hunt.Double;
40 import hunt.Long;
41 
42 /**
43  * Common interface for sharded and non-sharded BinaryRedis
44  */
45 interface BinaryRedisCommands {
46     string set(const(ubyte)[] key, const(ubyte)[] value);
47 
48     string set(const(ubyte)[] key, const(ubyte)[] value, SetParams params);
49 
50     const(ubyte)[] get(const(ubyte)[] key);
51 
52     bool exists(const(ubyte)[] key);
53 
54     Long persist(const(ubyte)[] key);
55 
56     string type(const(ubyte)[] key);
57 
58     const(ubyte)[] dump(const(ubyte)[] key);
59 
60     string restore(const(ubyte)[] key, int ttl, const(ubyte)[] serializedValue);
61 
62     string restoreReplace(const(ubyte)[] key, int ttl, const(ubyte)[] serializedValue);
63 
64     Long expire(const(ubyte)[] key, int seconds);
65 
66     Long pexpire(const(ubyte)[] key, long milliseconds);
67 
68     Long expireAt(const(ubyte)[] key, long unixTime);
69 
70     Long pexpireAt(const(ubyte)[] key, long millisecondsTimestamp);
71 
72     Long ttl(const(ubyte)[] key);
73 
74     Long pttl(const(ubyte)[] key);
75 
76     Long touch(const(ubyte)[] key);
77 
78     bool setbit(const(ubyte)[] key, long offset, bool value);
79 
80     bool setbit(const(ubyte)[] key, long offset, const(ubyte)[] value);
81 
82     bool getbit(const(ubyte)[] key, long offset);
83 
84     Long setrange(const(ubyte)[] key, long offset, const(ubyte)[] value);
85 
86     const(ubyte)[] getrange(const(ubyte)[] key, long startOffset, long endOffset);
87 
88     const(ubyte)[] getSet(const(ubyte)[] key, const(ubyte)[] value);
89 
90     Long setnx(const(ubyte)[] key, const(ubyte)[] value);
91 
92     string setex(const(ubyte)[] key, int seconds, const(ubyte)[] value);
93 
94     string psetex(const(ubyte)[] key, long milliseconds, const(ubyte)[] value);
95 
96     Long decrBy(const(ubyte)[] key, long decrement);
97 
98     Long decr(const(ubyte)[] key);
99 
100     Long incrBy(const(ubyte)[] key, long increment);
101 
102     Double incrByFloat(const(ubyte)[] key, double increment);
103 
104     // long incr(const(ubyte)[] key);
105 
106     // long append(const(ubyte)[] key, const(ubyte)[] value);
107 
108     // const(ubyte)[] substr(const(ubyte)[] key, int start, int end);
109 
110     // long hset(const(ubyte)[] key, const(ubyte)[] field, const(ubyte)[] value);
111 
112     // long hset(const(ubyte)[] key, Map!(const(ubyte)[], const(ubyte)[]) hash);
113 
114     // const(ubyte)[] hget(const(ubyte)[] key, const(ubyte)[] field);
115 
116     // long hsetnx(const(ubyte)[] key, const(ubyte)[] field, const(ubyte)[] value);
117 
118     // string hmset(const(ubyte)[] key, Map!(const(ubyte)[], const(ubyte)[]) hash);
119 
120     // List!(const(ubyte)[]) hmget(const(ubyte)[] key, const(ubyte)[][] fields...);
121 
122     // long hincrBy(const(ubyte)[] key, const(ubyte)[] field, long value);
123 
124     // Double hincrByFloat(const(ubyte)[] key, const(ubyte)[] field, double value);
125 
126     // bool hexists(const(ubyte)[] key, const(ubyte)[] field);
127 
128     // long hdel(const(ubyte)[] key, const(ubyte)[][] field...);
129 
130     // long hlen(const(ubyte)[] key);
131 
132     // Set!(const(ubyte)[]) hkeys(const(ubyte)[] key);
133 
134     // Collection!(const(ubyte)[]) hvals(const(ubyte)[] key);
135 
136     // Map!(const(ubyte)[], const(ubyte)[]) hgetAll(const(ubyte)[] key);
137 
138     // long rpush(const(ubyte)[] key, const(ubyte)[][] args...);
139 
140     // long lpush(const(ubyte)[] key, const(ubyte)[][] args...);
141 
142     // long llen(const(ubyte)[] key);
143 
144     // List!(const(ubyte)[]) lrange(const(ubyte)[] key, long start, long stop);
145 
146     // string ltrim(const(ubyte)[] key, long start, long stop);
147 
148     // const(ubyte)[] lindex(const(ubyte)[] key, long index);
149 
150     // string lset(const(ubyte)[] key, long index, const(ubyte)[] value);
151 
152     // long lrem(const(ubyte)[] key, long count, const(ubyte)[] value);
153 
154     // const(ubyte)[] lpop(const(ubyte)[] key);
155 
156     // const(ubyte)[] rpop(const(ubyte)[] key);
157 
158     // long sadd(const(ubyte)[] key, const(ubyte)[][] member...);
159 
160     // Set!(const(ubyte)[]) smembers(const(ubyte)[] key);
161 
162     // long srem(const(ubyte)[] key, const(ubyte)[][] member...);
163 
164     // const(ubyte)[] spop(const(ubyte)[] key);
165 
166     // Set!(const(ubyte)[]) spop(const(ubyte)[] key, long count);
167 
168     // long scard(const(ubyte)[] key);
169 
170     // bool sismember(const(ubyte)[] key, const(ubyte)[] member);
171 
172     // const(ubyte)[] srandmember(const(ubyte)[] key);
173 
174     // List!(const(ubyte)[]) srandmember(const(ubyte)[] key, int count);
175 
176     Long strlen(const(ubyte)[] key);
177 
178     // long zadd(const(ubyte)[] key, double score, const(ubyte)[] member);
179 
180     // long zadd(const(ubyte)[] key, double score, const(ubyte)[] member, ZAddParams params);
181 
182     // long zadd(const(ubyte)[] key, Map!(const(ubyte)[], double) scoreMembers);
183 
184     // long zadd(const(ubyte)[] key, Map!(const(ubyte)[], double) scoreMembers, ZAddParams params);
185 
186     // Set!(const(ubyte)[]) zrange(const(ubyte)[] key, long start, long stop);
187 
188     // long zrem(const(ubyte)[] key, const(ubyte)[][] members...);
189 
190     // Double zincrby(const(ubyte)[] key, double increment, const(ubyte)[] member);
191 
192     // Double zincrby(const(ubyte)[] key, double increment, const(ubyte)[] member, ZIncrByParams params);
193 
194     // long zrank(const(ubyte)[] key, const(ubyte)[] member);
195 
196     // long zrevrank(const(ubyte)[] key, const(ubyte)[] member);
197 
198     // Set!(const(ubyte)[]) zrevrange(const(ubyte)[] key, long start, long stop);
199 
200     // Set!(Tuple) zrangeWithScores(const(ubyte)[] key, long start, long stop);
201 
202     // Set!(Tuple) zrevrangeWithScores(const(ubyte)[] key, long start, long stop);
203 
204     // long zcard(const(ubyte)[] key);
205 
206     // Double zscore(const(ubyte)[] key, const(ubyte)[] member);
207 
208     // List!(const(ubyte)[]) sort(const(ubyte)[] key);
209 
210     // List!(const(ubyte)[]) sort(const(ubyte)[] key, SortingParams sortingParameters);
211 
212     // long zcount(const(ubyte)[] key, double min, double max);
213 
214     // long zcount(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
215 
216     // Set!(const(ubyte)[]) zrangeByScore(const(ubyte)[] key, double min, double max);
217 
218     // Set!(const(ubyte)[]) zrangeByScore(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
219 
220     // Set!(const(ubyte)[]) zrevrangeByScore(const(ubyte)[] key, double max, double min);
221 
222     // Set!(const(ubyte)[]) zrangeByScore(const(ubyte)[] key, double min, double max, int offset, int count);
223 
224     // Set!(const(ubyte)[]) zrevrangeByScore(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min);
225 
226     // Set!(const(ubyte)[]) zrangeByScore(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max, int offset, int count);
227 
228     // Set!(const(ubyte)[]) zrevrangeByScore(const(ubyte)[] key, double max, double min, int offset, int count);
229 
230     // Set!(Tuple) zrangeByScoreWithScores(const(ubyte)[] key, double min, double max);
231 
232     // Set!(Tuple) zrevrangeByScoreWithScores(const(ubyte)[] key, double max, double min);
233 
234     // Set!(Tuple) zrangeByScoreWithScores(const(ubyte)[] key, double min, double max, int offset, int count);
235 
236     // Set!(const(ubyte)[]) zrevrangeByScore(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min, int offset, int count);
237 
238     // Set!(Tuple) zrangeByScoreWithScores(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
239 
240     // Set!(Tuple) zrevrangeByScoreWithScores(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min);
241 
242     // Set!(Tuple) zrangeByScoreWithScores(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max, int offset, int count);
243 
244     // Set!(Tuple) zrevrangeByScoreWithScores(const(ubyte)[] key, double max, double min, int offset, int count);
245 
246     // Set!(Tuple) zrevrangeByScoreWithScores(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min, int offset, int count);
247 
248     // long zremrangeByRank(const(ubyte)[] key, long start, long stop);
249 
250     // long zremrangeByScore(const(ubyte)[] key, double min, double max);
251 
252     // long zremrangeByScore(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
253 
254     // long zlexcount(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
255 
256     // Set!(const(ubyte)[]) zrangeByLex(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
257 
258     // Set!(const(ubyte)[]) zrangeByLex(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max, int offset,
259     //     int count);
260 
261     // Set!(const(ubyte)[]) zrevrangeByLex(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min);
262 
263     // Set!(const(ubyte)[]) zrevrangeByLex(const(ubyte)[] key, const(ubyte)[] max, const(ubyte)[] min, int offset,
264     //     int count);
265 
266     // long zremrangeByLex(const(ubyte)[] key, const(ubyte)[] min, const(ubyte)[] max);
267 
268     // long linsert(const(ubyte)[] key, ListPosition where, const(ubyte)[] pivot, const(ubyte)[] value);
269 
270     // long lpushx(const(ubyte)[] key, const(ubyte)[][] arg...);
271 
272     // long rpushx(const(ubyte)[] key, const(ubyte)[][] arg...);
273 
274     Long del(const(ubyte)[] key);
275 
276     Long unlink(const(ubyte)[] key);
277 
278     const(ubyte)[] echo(const(ubyte)[] arg);
279 
280     Long move(const(ubyte)[] key, int dbIndex);
281 
282     Long bitcount(const(ubyte)[] key);
283 
284     Long bitcount(const(ubyte)[] key, long start, long end);
285 
286     Long pfadd(const(ubyte)[] key, const(ubyte)[][] elements...);
287 
288     Long pfcount(const(ubyte)[] key);
289 
290     // // Geo Commands
291 
292     // long geoadd(const(ubyte)[] key, double longitude, double latitude, const(ubyte)[] member);
293 
294     // long geoadd(const(ubyte)[] key, Map!(const(ubyte)[], GeoCoordinate) memberCoordinateMap);
295 
296     // Double geodist(const(ubyte)[] key, const(ubyte)[] member1, const(ubyte)[] member2);
297 
298     // Double geodist(const(ubyte)[] key, const(ubyte)[] member1, const(ubyte)[] member2, GeoUnit unit);
299 
300     // List!(const(ubyte)[]) geohash(const(ubyte)[] key, const(ubyte)[][] members...);
301 
302     // List!(GeoCoordinate) geopos(const(ubyte)[] key, const(ubyte)[][] members...);
303 
304     // List!(GeoRadiusResponse) georadius(const(ubyte)[] key, double longitude, double latitude, double radius,
305     //     GeoUnit unit);
306 
307     // List!(GeoRadiusResponse) georadiusReadonly(const(ubyte)[] key, double longitude, double latitude, double radius,
308     //     GeoUnit unit);
309 
310     // List!(GeoRadiusResponse) georadius(const(ubyte)[] key, double longitude, double latitude, double radius,
311     //     GeoUnit unit, GeoRadiusParam param);
312 
313     // List!(GeoRadiusResponse) georadiusReadonly(const(ubyte)[] key, double longitude, double latitude, double radius,
314     //     GeoUnit unit, GeoRadiusParam param);
315 
316     // List!(GeoRadiusResponse) georadiusByMember(const(ubyte)[] key, const(ubyte)[] member, double radius, GeoUnit unit);
317 
318     // List!(GeoRadiusResponse) georadiusByMemberReadonly(const(ubyte)[] key, const(ubyte)[] member, double radius, GeoUnit unit);
319 
320     // List!(GeoRadiusResponse) georadiusByMember(const(ubyte)[] key, const(ubyte)[] member, double radius, GeoUnit unit,
321     //     GeoRadiusParam param);
322 
323     // List!(GeoRadiusResponse) georadiusByMemberReadonly(const(ubyte)[] key, const(ubyte)[] member, double radius, GeoUnit unit,
324     //     GeoRadiusParam param);
325 
326     // ScanResult!(MapEntry!(const(ubyte)[], const(ubyte)[])) hscan(const(ubyte)[] key, const(ubyte)[] cursor);
327 
328     // ScanResult!(MapEntry!(const(ubyte)[], const(ubyte)[])) hscan(const(ubyte)[] key, const(ubyte)[] cursor, ScanParams params);
329 
330     // ScanResult!(const(ubyte)[]) sscan(const(ubyte)[] key, const(ubyte)[] cursor);
331 
332     // ScanResult!(const(ubyte)[]) sscan(const(ubyte)[] key, const(ubyte)[] cursor, ScanParams params);
333 
334     // ScanResult!(Tuple) zscan(const(ubyte)[] key, const(ubyte)[] cursor);
335 
336     // ScanResult!(Tuple) zscan(const(ubyte)[] key, const(ubyte)[] cursor, ScanParams params);
337 
338     // /**
339     //  * Executes BITFIELD Redis command
340     //  * @param key
341     //  * @param arguments
342     //  * @return 
343     //  */
344     // List!(long) bitfield(const(ubyte)[] key, const(ubyte)[][] arguments...);
345 
346     // /**
347     //  * Used for HSTRLEN Redis command
348     //  * @param key 
349     //  * @param field
350     //  * @return lenth of the value for key
351     //  */
352     // long hstrlen(const(ubyte)[] key, const(ubyte)[] field);
353 
354 
355     // const(ubyte)[] xadd(const(ubyte)[] key, const(ubyte)[] id, Map!(const(ubyte)[], const(ubyte)[]) hash, long maxLen, bool approximateLength);
356 
357     // long xlen(const(ubyte)[] key);
358 
359     // List!(const(ubyte)[]) xrange(const(ubyte)[] key, const(ubyte)[] start, const(ubyte)[] end, long count);
360 
361     // List!(const(ubyte)[]) xrevrange(const(ubyte)[] key, const(ubyte)[] end, const(ubyte)[] start, int count);
362 
363     // long xack(const(ubyte)[] key, const(ubyte)[] group, const(ubyte)[][] ids...);
364 
365     // string xgroupCreate(const(ubyte)[] key, const(ubyte)[] consumer, const(ubyte)[] id, bool makeStream);
366 
367     // string xgroupSetID(const(ubyte)[] key, const(ubyte)[] consumer, const(ubyte)[] id);
368 
369     // long xgroupDestroy(const(ubyte)[] key, const(ubyte)[] consumer);
370 
371     // string xgroupDelConsumer(const(ubyte)[] key, const(ubyte)[] consumer, const(ubyte)[] consumerName);
372 
373     // long xdel(const(ubyte)[] key, const(ubyte)[][] ids...);
374 
375     // long xtrim(const(ubyte)[] key, long maxLen, bool approximateLength);
376 
377     // List!(const(ubyte)[]) xpending(const(ubyte)[] key, const(ubyte)[] groupname, const(ubyte)[] start, const(ubyte)[] end, int count, const(ubyte)[] consumername);
378 
379     // List!(const(ubyte)[]) xclaim(const(ubyte)[] key, const(ubyte)[] groupname, const(ubyte)[] consumername, long minIdleTime, long newIdleTime, int retries, bool force, const(ubyte)[][] ids);
380 
381     // Object sendCommand(ProtocolCommand cmd, const(ubyte)[][] args...);
382 }