]> gitweb.factorcode.org Git - factor.git/blob - extra/redis/assoc/assoc.factor
extra.redis.assoc: Assoc protocol implementation for Redis
[factor.git] / extra / redis / assoc / assoc.factor
1 ! Copyright (C) 2009 Bruno Deferrari
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs io.encodings.8-bit io.sockets
4 io.streams.duplex kernel redis sequences ;
5 IN: redis.assoc
6
7 TUPLE: redis-assoc host port encoding password ;
8
9 CONSTANT: default-redis-port 6379
10
11 : <redis-assoc> ( -- redis-assoc )
12     redis-assoc new
13         "127.0.0.1" >>host
14         default-redis-port >>port
15         latin1 >>encoding ;
16
17 INSTANCE: redis-assoc assoc
18
19 : with-redis-assoc ( redis-assoc quot -- )
20     [
21         [ host>> ] [ port>> ] [ encoding>> ] tri
22         [ <inet> ] dip <client> drop
23     ] dip with-stream ; inline
24
25 M: redis-assoc at* [ redis-get dup >boolean ] with-redis-assoc ;
26
27 M: redis-assoc assoc-size [ redis-dbsize ] with-redis-assoc ;
28
29 M: redis-assoc >alist
30     [ "*" redis-keys dup redis-mget zip ] with-redis-assoc ;
31
32 M: redis-assoc set-at [ redis-set drop ] with-redis-assoc ;
33
34 M: redis-assoc delete-at [ redis-del drop ] with-redis-assoc ;
35
36 M: redis-assoc clear-assoc
37     [ "*" redis-keys [ redis-del drop ] each ] with-redis-assoc ;
38
39 M: redis-assoc equal? assoc= ;
40
41 M: redis-assoc hashcode* assoc-hashcode ;