1#ifndef FB656817_7041_48D5_80B2_347168163158
2#define FB656817_7041_48D5_80B2_347168163158
5
6
7
8
13#include <unordered_map>
21
22
23
24
25
27 using is_transparent =
void;
30
31
32
33
34
35 std::size_t
operator()(std::string_view s)
const noexcept
37 const std::hash<std::string_view> h;
43
44
45
46
47
48
49
58
59
60
61
62
66
67
68
69
73
74
75
76
77
78
79
80
81 void add_handler(std::string&& method, dispatcher::handler_t&& handler);
84
85
86
87
88
89
90
91
92
93
97
98
99
100
101
102
103
104
105
114
115
116
117
118
119
120
121
125
126
127
128
129
130
131
132
133
134
138
139
140
141
142
143
144
145
149
150
151
152
153
154
155
156
157
158
159
Private implementation of the JSON RPC dispatcher class.
static jsonrpc_request parse_request(const nlohmann::json &request, nlohmann::json &extra)
Parses a JSON RPC request.
nlohmann::json invoke(const std::string &method, const nlohmann::json ¶ms, const nlohmann::json &extra)
Invokes a method handler.
static nlohmann::json generate_error_response(const exception &e, const nlohmann::json &id)
Generates an error response.
nlohmann::json process_batch_request(const nlohmann::json &request, const nlohmann::json &extra)
Processes a batch request.
static void validate_request(const jsonrpc_request &r)
Validates a JSON RPC request.
dispatcher * q_ptr
Pointer to the public dispatcher object.
dispatcher_private(dispatcher *q)
Constructs a new dispatcher_private object.
void add_handler(std::string &&method, dispatcher::handler_t &&handler)
Adds a method handler.
nlohmann::json process_request(const nlohmann::json &request, const nlohmann::json &extra)
Processes a JSON RPC request.
A class that manages JSON RPC method handlers and processes JSON RPC requests.
dispatcher & operator=(dispatcher &&rhs)=default
Move assignment operator.
dispatcher(dispatcher &&rhs)=default
Move constructor.
virtual void on_request(const nlohmann::json &extra)
Invoked when a request is received.
void add_ex(std::string_view method, F &&f, C instance)
Adds a method handler with an extra parameter and a class instance.
std::string parse_and_process_request(const std::string &request, const nlohmann::json &extra=nlohmann::json::object())
Parses and processes a JSON RPC request.
constexpr auto create_closure(C inst, F &&f) const
Creates a closure for invoking a member function with JSON parameters.
std::string process_request(const nlohmann::json &request, const nlohmann::json &extra=nlohmann::json::object())
Processes a JSON RPC request.
virtual void on_request_processed(const std::string &method, int code, const nlohmann::json &extra)
Invoked after the method handler is called.
void add_internal_method(std::string_view method, handler_t &&handler)
Adds a method handler for the specified method.
void add(std::string_view method, F &&f)
Adds a method handler f for the method method.
virtual void on_method(const std::string &method, const nlohmann::json &extra)
Invoked right before the method handler is called.
void add(std::string_view method, F &&f, C instance)
Adds a method to the dispatcher with the specified instance and function.
dispatcher()
Class constructor.
dispatcher(const dispatcher &)=delete
dispatcher & operator=(const dispatcher &)=delete
virtual ~dispatcher()
Class destructor.
void add_ex(std::string_view method, F &&f)
Adds a method handler with an extra parameter.
std::unique_ptr< dispatcher_private > d_ptr
Pointer to the implementation (Pimpl idiom).
JSON RPC Exception class.
exception(const exception &)=default
Default copy constructor.
~exception() override
Default destructor.
nlohmann::json m_data
Custom data associated with the error.
std::string m_message
Error message.
int code() const noexcept
Returns the error code.
const std::string & message() const noexcept
Returns the error message.
exception(exception &&)=default
Default move constructor.
exception(int code, std::string_view message)
Construct a new exception object.
exception & operator=(const exception &rhs)=default
Default copy assignment operator.
const nlohmann::json & data() const noexcept
Returns custom data associated with the error.
exception & operator=(exception &&rhs)=default
Default move assignment operator.
const char * what() const noexcept override
Returns the error message.
nlohmann::json to_json() const
Returns the error message as an Error Object.
exception(int code, std::string_view message, const T &data)
Construct a new exception object with additional data.
#define WWA_JSONRPC_EXPORT
Macro for exporting symbols when building the library dynamically or importing symbols when using the...
static constexpr int INVALID_PARAMS
Invalid method parameter(s).
static constexpr int INTERNAL_ERROR
Internal JSON-RPC error.
static constexpr int METHOD_NOT_FOUND
The method does not exist or is not available.
static constexpr int INVALID_REQUEST
The JSON sent is not a valid Request object.
static constexpr int PARSE_ERROR
Invalid JSON was received by the server.
static constexpr std::string_view err_method_not_found
Error message for when the method is not found.
static constexpr std::string_view err_not_jsonrpc_2_0_request
Error message for when the request is not a JSON-RPC 2.0 request.
static constexpr std::string_view err_empty_batch
Error message for when the batch request is empty.
static constexpr std::string_view err_empty_method
Error message for when the method is empty.
static constexpr std::string_view err_bad_params_type
Error message for when the parameters are not an array or an object.
static constexpr std::string_view err_invalid_params_passed_to_method
Error message for when the parameters passed to the method are not correct.
static constexpr std::string_view err_bad_id_type
Error message for when the ID is not a number, a string, or null.
constexpr auto convert_args(const nlohmann::json ¶ms, std::index_sequence< Indices... >)
Converts JSON parameters to a tuple of arguments based on the specified types.
constexpr auto make_inst_tuple(C inst)
Creates a tuple containing the instance if it is a class pointer, or an empty tuple if it is a null p...
Contains the implementation details of the JSON RPC library.
Primary template for function traits.
Custom hasher for std::string_view.
std::size_t operator()(std::string_view s) const noexcept
Computes the hash value for a given std::string_view.
Represents a JSON RPC request.
std::string method
The name of the method to be invoked.
std::string jsonrpc
The JSON RPC version.
nlohmann::json id
The ID of the request.
nlohmann::json params
The parameters for the method.