6 #ifndef IROHA_JSON_COMMON_HPP 7 #define IROHA_JSON_COMMON_HPP 11 #include <unordered_map> 13 #include <rapidjson/document.h> 14 #include <rapidjson/prettywriter.h> 15 #include <rapidjson/stringbuffer.h> 27 namespace converters {
42 return boost::optional<V>(std::forward<T>(x));
46 template <
size_t size>
50 return hexstringToArray<size>(std::forward<T>(x));
62 template <
typename T,
typename D>
64 const std::string &field) {
65 if (document.HasMember(field.c_str())
66 and document[field.c_str()].template Is<T>()) {
67 return document[field.c_str()].template Get<T>();
102 const std::string &field,
103 Convert transform = Convert()) {
104 return [
this, member, field, transform](
auto block) {
105 return deserializeField<T>(document, field) | transform
118 template <
typename V,
typename B>
119 auto Uint(V B::*member,
const std::string &field) {
120 return deserialize<uint32_t>(member, field);
131 template <
typename V,
typename B>
132 auto Uint64(V B::*member,
const std::string &field) {
133 return deserialize<uint64_t>(member, field);
144 template <
typename V,
typename B>
145 auto Bool(V B::*member,
const std::string &field) {
146 return deserialize<bool>(member, field);
157 template <
typename V,
typename B>
158 auto String(V B::*member,
const std::string &field) {
159 return deserialize<std::string>(member, field);
168 return deserializeField<std::string>(document, field);
182 template <
typename V,
typename B,
typename Convert = Convert<V>>
184 const std::string &field,
185 Convert transform = Convert()) {
186 return deserialize<rapidjson::Value::ConstArray>(
187 member, field, transform);
198 template <
typename V,
typename B,
typename Convert = Convert<V>>
200 const std::string &field,
201 Convert transform = Convert()) {
202 return deserialize<rapidjson::Value::ConstObject>(
203 member, field, transform);
216 template <
typename D>
223 template <
typename T>
233 struct Convert<
Block::SignaturesType> {
234 template <
typename T>
236 auto acc_signatures = [](
auto init,
auto &x) {
237 return init | [&x](
auto signatures) {
239 signatures.push_back(signature);
240 return boost::make_optional(std::move(signatures));
244 return std::accumulate(x.begin(),
253 template <
typename T>
255 auto acc_hashes = [](
auto init,
auto &x) {
256 return init | [&x](
auto tx_hashes)
260 if (not x.IsString()) {
265 if (not tx_hash_opt) {
267 return boost::make_optional(std::move(tx_hashes));
269 return tx_hash_opt | [&tx_hashes](
auto tx_hash) {
270 tx_hashes.push_back(tx_hash);
271 return boost::make_optional(std::move(tx_hashes));
275 return std::accumulate(
291 rapidjson::Document::AllocatorType &allocator);
299 const std::string &
string);
306 std::string
jsonToString(
const rapidjson::Document &document);
311 #endif // IROHA_JSON_COMMON_HPP Definition: signature.hpp:17
auto Object(V B::*member, const std::string &field, Convert transform=Convert())
Definition: json_common.hpp:199
auto Uint64(V B::*member, const std::string &field)
Definition: json_common.hpp:132
auto String(const std::string &field)
Definition: json_common.hpp:167
std::string jsonToString(const Document &document)
Definition: json_common.cpp:35
auto operator()(T &&x) const
Definition: json_common.hpp:254
auto Array(V B::*member, const std::string &field, Convert transform=Convert())
Definition: json_common.hpp:183
const D & document
Definition: json_common.hpp:207
auto deserialize(V B::*member, const std::string &field, Convert transform=Convert())
Definition: json_common.hpp:101
auto Bool(V B::*member, const std::string &field)
Definition: json_common.hpp:145
auto operator()(T &&x) const
Definition: json_common.hpp:224
auto operator()(T &&x) const
Definition: json_common.hpp:235
Definition: block_query.hpp:15
FieldDeserializer(const D &document)
Definition: json_common.hpp:81
boost::optional< T > deserializeField(const D &document, const std::string &field)
Definition: json_common.hpp:63
std::vector< TxHashType > TxHashCollectionType
Definition: get_transactions.hpp:48
decltype(sigs) SignaturesType
Definition: block.hpp:39
Definition: get_transactions.hpp:46
Definition: json_common.hpp:33
Value serializeSignature(const Signature &signature, Document::AllocatorType &allocator)
Definition: json_common.cpp:13
auto assignObjectField(B object, V B::*member)
Definition: obj_utils.hpp:63
pubkey_t pubkey
Definition: signature.hpp:26
auto makeFieldDeserializer(const D &document)
Definition: json_common.hpp:217
sig_t signature
Definition: signature.hpp:22
boost::optional< Document > stringToJson(const std::string &string)
Definition: json_common.cpp:26
auto operator()(T &&x) const
Definition: json_common.hpp:41
Definition: json_common.hpp:222
Definition: json_common.hpp:77
auto operator()(T &&x) const
Definition: json_common.hpp:49
auto String(V B::*member, const std::string &field)
Definition: json_common.hpp:158
auto Uint(V B::*member, const std::string &field)
Definition: json_common.hpp:119