unpacker.h (1144B)
1 #pragma once 2 3 #include <inttypes.h> 4 #include <stdbool.h> 5 #include <string.h> 6 7 #include "klib/kvec.h" 8 #include "mpack/mpack_core.h" 9 #include "mpack/object.h" 10 #include "nvim/api/private/defs.h" 11 #include "nvim/api/private/dispatch.h" 12 #include "nvim/grid_defs.h" 13 #include "nvim/memory_defs.h" 14 #include "nvim/msgpack_rpc/channel_defs.h" // IWYU pragma: keep 15 #include "nvim/types_defs.h" 16 #include "nvim/ui_defs.h" 17 18 struct Unpacker { 19 mpack_parser_t parser; 20 mpack_tokbuf_t reader; 21 22 const char *read_ptr; 23 size_t read_size; 24 25 #define MAX_EXT_LEN 9 // byte + 8-byte integer 26 char ext_buf[MAX_EXT_LEN]; 27 28 int state; 29 MessageType type; 30 uint32_t request_id; 31 size_t method_name_len; 32 MsgpackRpcRequestHandler handler; 33 Object error; // error return 34 Object result; // arg list or result 35 Error unpack_error; 36 37 Arena arena; 38 39 int nevents; 40 int ncalls; 41 UIClientHandler ui_handler; 42 GridLineEvent grid_line_event; 43 bool has_grid_line_event; 44 }; 45 46 typedef kvec_t(char) AdditionalDataBuilder; 47 48 // unrecovareble error. unpack_error should be set! 49 #define unpacker_closed(p) ((p)->state < 0) 50 51 #include "msgpack_rpc/unpacker.h.generated.h"