mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
Clio RPC subsystem
Background
The RPC subsystem is where the common framework for handling incoming JSON requests is implemented. Currently the NextGen RPC framework is a work in progress and the handlers are not yet implemented using the new common framework classes.
Integration plan
- Implement base framework - done
- Migrate handlers one by one, making them injectable, adding unit-tests - in progress
- Integrate all new handlers into clio in one go
- Cover the rest with unit-tests
- Release first time with new subsystem active
Components
See common subfolder.
- AnyHandler: The type-erased wrapper that allows for storing different handlers in one map/vector.
- RpcSpec/FieldSpec: The RPC specification classes, used to specify how incoming JSON is to be validated before it's parsed and passed on to individual handler implementations.
- Validators: A bunch of supported validators that can be specified as requirements for each
FieldSpecto make up the finalRpcSpecof any given RPC handler.
Implementing a (NextGen) handler
See unittests/rpc for exmaples.
Handlers need to fulfil the requirements specified by the Handler concept (see rpc/common/Concepts.h):
- Expose types:
Input- The POD struct which acts as input for the handlerOutput- The POD struct which acts as output of a valid handler invocation
- Have a
spec()member function returning a const reference to anRpcSpecdescribing the JSON input. - Have a
process(Input)member function that operates onInputPOD and returnsHandlerReturnType<Output> - Implement
value_fromandvalue_tosupport usingtag_invokeas perboost::jsondocumentation for these functions.