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