#ifndef REDISDB_PARSER_H
#define REDISDB_PARSER_H

struct rdbp_mblk_store {
    AV* mblk_reply;
    unsigned long mblk_len;
    struct rdbp_mblk_store *next;
};

struct redisdb_parser {
    int utf8;
    SV* master;
    AV* callbacks;
    SV* default_cb;
    SV* buffer;
    SV* error_class;
    SV* error_class_constructor;
    int state;
    int mblk_level;
    AV* mblk_reply;
    struct rdbp_mblk_store* mblk_store;
    unsigned long mblk_len;
    unsigned long bulk_len;
    IV thx;
};

typedef struct redisdb_parser RDB_parser;

#define RDBP_CLEAN          0
#define RDBP_READ_LINE      1
#define RDBP_READ_ERROR     2
#define RDBP_READ_NUMBER    3
#define RDBP_READ_BULK_LEN  4
#define RDBP_READ_BULK      5
#define RDBP_READ_MBLK_LEN  6
#define RDBP_WAIT_BUCKS     7

RDB_parser* rdb_parser__init(SV *master, SV *eror_class, int utf8);
void rdb_parser__free(RDB_parser *parser);
int rdb_parser__parse_reply(RDB_parser *parser);
void rdb_parser__propagate_reply(RDB_parser *parser, SV *reply);

#endif