aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/private/dispatch.h
blob: 4ae61b2bfb9a5007cbc8df6a4e4beb95a6e3a968 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef NVIM_API_PRIVATE_DISPATCH_H
#define NVIM_API_PRIVATE_DISPATCH_H

#include <stdbool.h>
#include <stdint.h>

#include "nvim/api/private/defs.h"
#include "nvim/memory.h"
#include "nvim/types.h"

typedef Object (*ApiDispatchWrapper)(uint64_t channel_id, Array args, Arena *arena, Error *error);

/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores
/// functions of this type.
struct MsgpackRpcRequestHandler {
  const char *name;
  ApiDispatchWrapper fn;
  bool fast;  // Function is safe to be executed immediately while running the
              // uv loop (the loop is run very frequently due to breakcheck).
              // If "fast" is false, the function is deferred, i e the call will
              // be put in the event queue, for safe handling later.
  bool arena_return;  // return value is allocated in the arena (or statically)
                      // and should not be freed as such.
};

extern const MsgpackRpcRequestHandler method_handlers[];

#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "api/private/dispatch.h.generated.h"
# include "api/private/dispatch_wrappers.h.generated.h"
#endif

#endif  // NVIM_API_PRIVATE_DISPATCH_H