32 #ifndef LEDGER_CORE_ABSTRACTWEBSOCKETNOTIFICATIONPARSER_H 33 #define LEDGER_CORE_ABSTRACTWEBSOCKETNOTIFICATIONPARSER_H 35 #define PROXY_PARSE_WS(method, ...) \ 36 auto& currentObject = _currentObject; \ 37 if (currentObject == "block") { \ 38 return getBlockParser().method(__VA_ARGS__); \ 39 } else if (currentObject == "transaction") { \ 40 return getTransactionParser().method(__VA_ARGS__); \ 45 template<
typename BlockchainExplorerTransaction,
typename BlockchainExplorerBlock,
typename TransactionParser,
typename BlockParser>
49 BlockchainExplorerTransaction transaction;
50 BlockchainExplorerBlock block;
52 std::string blockchain;
55 void init(
Result *result) {
60 PROXY_PARSE_WS(Null) {
66 PROXY_PARSE_WS(Bool, b) {
72 PROXY_PARSE_WS(Int, i) {
77 bool Uint(
unsigned i) {
78 PROXY_PARSE_WS(Uint, i) {
83 bool Int64(int64_t i) {
84 PROXY_PARSE_WS(Int64, i) {
89 bool Uint64(uint64_t i) {
90 PROXY_PARSE_WS(Uint64, i) {
95 bool Double(
double d) {
96 PROXY_PARSE_WS(Double, d) {
101 bool RawNumber(
const rapidjson::Reader::Ch *str, rapidjson::SizeType length,
103 PROXY_PARSE_WS(RawNumber, str, length, copy) {
109 String(
const rapidjson::Reader::Ch *str, rapidjson::SizeType length,
bool copy) {
110 PROXY_PARSE_WS(
String, str, length, copy) {
111 if (getLastKey() ==
"type") {
112 _result->type = std::string(str, length);
113 }
else if (getLastKey() ==
"block_chain") {
114 _result->blockchain = std::string(str, length);
124 _currentObject = getLastKey();
126 auto& currentObject = _currentObject;
128 if (currentObject ==
"transaction") {
129 getTransactionParser().init(&_result->transaction);
130 }
else if (currentObject ==
"block") {
131 getBlockParser().init(&_result->block);
134 PROXY_PARSE_WS(StartObject) {
140 virtual bool Key(
const rapidjson::Reader::Ch *str, rapidjson::SizeType length,
bool copy) {
141 PROXY_PARSE_WS(Key, str, length, copy) {
146 bool EndObject(rapidjson::SizeType memberCount) {
150 PROXY_PARSE_WS(EndObject, memberCount) {
156 PROXY_PARSE_WS(StartArray) {
161 bool EndArray(rapidjson::SizeType elementCount) {
162 PROXY_PARSE_WS(EndArray, elementCount) {
170 virtual std::string &getLastKey() = 0;
171 std::string _currentObject =
"";
178 #endif //LEDGER_CORE_ABSTRACTWEBSOCKETNOTIFICATIONPARSER_H Definition: BlockParser.hpp:39
Definition: AbstractWebSocketNotificationParser.h:48
Definition: TransactionParser.hpp:47
Definition: Account.cpp:8
Definition: AbstractWebSocketNotificationParser.h:46