diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 5bc8a8db..90948009 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -400,26 +400,33 @@ bool nano::vote::operator!= (nano::vote const & other_a) const return !(*this == other_a); } -std::string nano::vote::to_json () const +void nano::vote::serialize_json (boost::property_tree::ptree & tree) const { - std::stringstream stream; - boost::property_tree::ptree tree; tree.put ("account", account.to_account ()); tree.put ("signature", signature.number ()); tree.put ("sequence", std::to_string (sequence)); boost::property_tree::ptree blocks_tree; for (auto block : blocks) { + boost::property_tree::ptree entry; if (block.which ()) { - blocks_tree.put ("", boost::get> (block)->to_json ()); + entry.put ("", boost::get (block).to_string ()); } else { - blocks_tree.put ("", boost::get> (block)->hash ().to_string ()); + entry.put ("", boost::get> (block)->hash ().to_string ()); } + blocks_tree.push_back (std::make_pair ("", entry)); } tree.add_child ("blocks", blocks_tree); +} + +std::string nano::vote::to_json () const +{ + std::stringstream stream; + boost::property_tree::ptree tree; + serialize_json (tree); boost::property_tree::write_json (stream, tree); return stream.str (); } diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 107cdf42..24b59e75 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -227,6 +227,7 @@ public: bool operator!= (nano::vote const &) const; void serialize (nano::stream &, nano::block_type) const; void serialize (nano::stream &) const; + void serialize_json (boost::property_tree::ptree & tree) const; bool deserialize (nano::stream &, nano::block_uniquer * = nullptr); bool validate () const; boost::transform_iterator begin () const;