ledger-core
AbstractBlockParser.h
1 /*
2  *
3  * AbstractBlockParser
4  *
5  * Created by El Khalil Bellakrid on 16/11/2018.
6  *
7  * The MIT License (MIT)
8  *
9  * Copyright (c) 2018 Ledger
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a copy
12  * of this software and associated documentation files (the "Software"), to deal
13  * in the Software without restriction, including without limitation the rights
14  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15  * copies of the Software, and to permit persons to whom the Software is
16  * furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included in all
19  * copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27  * SOFTWARE.
28  *
29  */
30 
31 
32 #ifndef LEDGER_CORE_ABSTRACTBLOCKPARSER_H
33 #define LEDGER_CORE_ABSTRACTBLOCKPARSER_H
34 
35 #include <rapidjson/reader.h>
36 
37 #include <collections/collections.hpp>
38 #include <math/BigInt.h>
39 #include <net/HttpClient.hpp>
40 #include <utils/DateUtils.hpp>
41 
42 namespace ledger {
43  namespace core {
44  template <typename BlockchainExplorerTransactionBlock>
46  public:
47 
48  bool Null() {
49  return true;
50  }
51 
52  bool Bool(bool b) {
53  return true;
54  }
55 
56  bool Int(int i) {
57  return true;
58  }
59 
60  bool Uint(unsigned i) {
61  return true;
62  }
63 
64  bool Int64(int64_t i) {
65  return true;
66  }
67 
68  bool Uint64(uint64_t i) {
69  return true;
70  }
71 
72  bool Double(double d) {
73  return true;
74  }
75 
76  bool RawNumber(const rapidjson::Reader::Ch *str, rapidjson::SizeType length, bool copy) {
77  if (getLastKey() == "height") {
78  std::string number(str, length);
79  BigInt value = BigInt::fromString(number);
80  _block->height = value.toUint64();
81  }
82  return true;
83  }
84 
85  bool String(const rapidjson::Reader::Ch *str, rapidjson::SizeType length, bool copy) {
86  std::string value = std::string(str, length);
87  if (getLastKey() == "hash") {
88  _block->hash = value;
89  } else if (getLastKey() == "time") {
90  _block->time = DateUtils::fromJSON(value);
91  }
92  return true;
93  }
94 
95  bool StartObject() {
96  return true;
97  }
98 
99  bool Key(const rapidjson::Reader::Ch *str, rapidjson::SizeType length, bool copy) {
100  return true;
101  }
102 
103  bool EndObject(rapidjson::SizeType memberCount) {
104  return true;
105  }
106 
107  bool StartArray() {
108  return true;
109  }
110 
111  bool EndArray(rapidjson::SizeType elementCount) {
112  return true;
113  }
114 
115  void init(BlockchainExplorerTransactionBlock *block) {
116  _block = block;
117  }
118 
119  protected:
120  virtual std::string &getLastKey() = 0;
121  BlockchainExplorerTransactionBlock* _block;
122  };
123  }
124 }
125 
126 #endif //LEDGER_CORE_ABSTRACTBLOCKPARSER_H
Definition: AbstractBlockParser.h:45
Definition: Account.cpp:8
Definition: BigInt.h:56