diff --git a/src/messages/rpc/model.cpp b/src/messages/rpc/model.cpp index 79003fae9..4fa63b0da 100644 --- a/src/messages/rpc/model.cpp +++ b/src/messages/rpc/model.cpp @@ -56,6 +56,9 @@ DEFINE_JSON_TO_TAG(version) // value_t // ---------------------------------------------------------------------------- +BC_PUSH_WARNING(NO_STATIC_CAST) +BC_PUSH_WARNING(NO_CASTS_FOR_ARITHMETIC_CONVERSION) + DEFINE_JSON_FROM_TAG(value_t) { // In the general model, all numbers serialize to double. @@ -75,52 +78,61 @@ DEFINE_JSON_FROM_TAG(value_t) }, [&](int8_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](int16_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](int32_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](int64_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](uint8_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](uint16_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](uint32_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, [&](uint64_t visit) THROWS { - value = value_from(visit).as_double(); + value = static_cast(visit); }, - [&](const string_t& visit) THROWS { value = visit; }, [&](const array_t& visit) THROWS { - value = value_from(visit); + value.emplace_array(); + auto& array = value.as_array(); + array.reserve(visit.size()); + for (const auto& element: visit) + array.push_back(value_from(element)); }, [&](const object_t& visit) THROWS { - value = value_from(visit); + value.emplace_object(); + auto& object = value.as_object(); + for (const auto& pair: visit) + object.emplace(pair.first, value_from(pair.second)); } }, instance.value()); } +BC_POP_WARNING() +BC_POP_WARNING() + DEFINE_JSON_TO_TAG(value_t) { if (value.is_null()) @@ -297,23 +309,23 @@ DEFINE_JSON_FROM_TAG(response_t) if (instance.error.has_value()) { - const auto& result = instance.error.value(); + const auto& error = instance.error.value(); - if (result.data.has_value()) + if (error.data.has_value()) { object["error"] = { - { "code", result.code }, - { "message", result.message }, - { "data", value_from(result.data.value()) } + { "code", error.code }, + { "message", error.message }, + { "data", value_from(error.data.value()) } }; } else { object["error"] = { - { "code", result.code }, - { "message", result.message } + { "code", error.code }, + { "message", error.message } }; } }