resp.h (1200B)
1 #ifndef UDPHOLE_RESP_H 2 #define UDPHOLE_RESP_H 3 4 #include <stddef.h> 5 6 #define RESPT_SIMPLE 0 7 #define RESPT_ERROR 1 8 #define RESPT_BULK 2 9 #define RESPT_INT 3 10 #define RESPT_ARRAY 4 11 12 typedef struct resp_object resp_object; 13 struct resp_object { 14 int type; 15 union { 16 char *s; 17 long long i; 18 struct { resp_object *elem; size_t n; } arr; 19 } u; 20 }; 21 22 void resp_free(resp_object *o); 23 24 resp_object *resp_deep_copy(const resp_object *o); 25 26 resp_object *resp_map_get(const resp_object *o, const char *key); 27 28 const char *resp_map_get_string(const resp_object *o, const char *key); 29 30 void resp_map_set(resp_object *map, const char *key, resp_object *value); 31 32 resp_object *resp_read(int fd); 33 34 int resp_encode_array(int argc, const resp_object *const *argv, char **out_buf, size_t *out_len); 35 36 int resp_serialize(const resp_object *o, char **out_buf, size_t *out_len); 37 38 resp_object *resp_array_init(void); 39 40 int resp_array_append_obj(resp_object *destination, resp_object *value); 41 42 int resp_array_append_simple(resp_object *destination, const char *str); 43 int resp_array_append_bulk(resp_object *destination, const char *str); 44 int resp_array_append_int(resp_object *destination, long long i); 45 46 #endif