#ifndef LCB_VIEWROW_H_
#define LCB_VIEWROW_H_
#include <libcouchbase/couchbase.h>
#include <libcouchbase/views.h>
#include "contrib/jsonsl/jsonsl.h"
#include "simplestring.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct lcbvrow_PARSER_st lcbjsp_PARSER;
typedef enum {
LCBJSP_MODE_VIEWS,
LCBJSP_MODE_N1QL,
LCBJSP_MODE_FTS
} lcbjsp_MODE;
typedef enum {
LCBJSP_TYPE_ROW,
LCBJSP_TYPE_COMPLETE,
LCBJSP_TYPE_ERROR
} lcbjsp_ROWTYPE;
typedef struct {
lcbjsp_ROWTYPE type;
lcb_IOV docid;
lcb_IOV key;
lcb_IOV value;
lcb_IOV row;
lcb_IOV geo;
} lcbjsp_ROW;
typedef void (*lcbjsp_CALLBACK)(lcbjsp_PARSER*,const lcbjsp_ROW*);
struct lcbvrow_PARSER_st {
jsonsl_t jsn;
jsonsl_t jsn_rdetails;
jsonsl_jpr_t jpr;
lcb_string meta_buf;
lcb_string current_buf;
lcb_string last_hk;
lcb_U8 mode;
lcb_U8 have_error;
lcb_U8 initialized;
lcb_U8 meta_complete;
unsigned rowcount;
size_t min_pos;
size_t keep_pos;
size_t header_len;
size_t last_row_endpos;
void *data;
void *cxx_data;
lcbjsp_CALLBACK callback;
};
lcbjsp_PARSER*
lcbjsp_create(int);
void
lcbjsp_reset(lcbjsp_PARSER *ctx);
void
lcbjsp_free(lcbjsp_PARSER *ctx);
void
lcbjsp_feed(lcbjsp_PARSER *ctx, const char *data, size_t ndata);
void
lcbjsp_parse_viewrow(lcbjsp_PARSER *vp, lcbjsp_ROW *vr);
void
lcbjsp_get_postmortem(const lcbjsp_PARSER *v, lcb_IOV *out);
#ifdef __cplusplus
}
#endif
#endif