1 ! Copyright (C) 2009 Bruno Deferrari
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: combinators io kernel math math.parser sequences ;
4 IN: redis.response-parser
8 TUPLE: redis-response message ;
9 ERROR: redis-error message ;
11 : <redis-response> ( message -- redis-response )
16 : read-bulk ( n -- bytes )
17 dup 0 < [ drop f ] [ read 2 read drop ] if ;
18 : read-multi-bulk ( n -- seq/f )
21 [ [ read-response ] replicate ] if ;
23 : handle-response ( string -- string )
26 : handle-error ( string -- * )
31 : read-response ( -- response )
33 { CHAR: : [ string>number ] }
34 { CHAR: + [ handle-response ] }
35 { CHAR: $ [ string>number read-bulk ] }
36 { CHAR: * [ string>number read-multi-bulk ] }
37 { CHAR: - [ handle-error ] }
40 : check-response ( -- )