diff options
Diffstat (limited to 'src/nvim/msgpack_rpc/defs.h')
| -rw-r--r-- | src/nvim/msgpack_rpc/defs.h | 43 | 
1 files changed, 43 insertions, 0 deletions
| diff --git a/src/nvim/msgpack_rpc/defs.h b/src/nvim/msgpack_rpc/defs.h new file mode 100644 index 0000000000..13067fb7b4 --- /dev/null +++ b/src/nvim/msgpack_rpc/defs.h @@ -0,0 +1,43 @@ +#ifndef NVIM_MSGPACK_RPC_DEFS_H +#define NVIM_MSGPACK_RPC_DEFS_H + +#include <msgpack.h> + + +/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores +/// functions of this type. +typedef struct { +  Object (*fn)(uint64_t channel_id, +               uint64_t request_id, +               Array args, +               Error *error); +  bool defer;  // Should the call be deferred to the main loop? This should +               // be true if the function mutates editor data structures such +               // as buffers, windows, tabs, or if it executes vimscript code. +} MsgpackRpcRequestHandler; + +/// Initializes the msgpack-rpc method table +void msgpack_rpc_init_method_table(void); + +void msgpack_rpc_init_function_metadata(Dictionary *metadata); + +/// Dispatches to the actual API function after basic payload validation by +/// `msgpack_rpc_call`. It is responsible for validating/converting arguments +/// to C types, and converting the return value back to msgpack types. +/// The implementation is generated at compile time with metadata extracted +/// from the api/*.h headers, +/// +/// @param channel_id The channel id +/// @param method_id The method id +/// @param req The parsed request object +/// @param error Pointer to error structure +/// @return Some object +Object msgpack_rpc_dispatch(uint64_t channel_id, +                            msgpack_object *req, +                            Error *error) +  FUNC_ATTR_NONNULL_ARG(2) FUNC_ATTR_NONNULL_ARG(3); + +MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name, +                                                     size_t name_len) +  FUNC_ATTR_NONNULL_ARG(1); +#endif  // NVIM_MSGPACK_RPC_DEFS_H | 
