change json seralization of map<string,T> to be object rather than array of pairs
This commit is contained in:
parent
0dca15c395
commit
a421e28048
5 changed files with 48 additions and 1 deletions
|
|
@ -93,10 +93,17 @@ namespace fc
|
|||
template<typename K, typename T>
|
||||
void from_variant( const variant& var, fc::flat_map<K,T>& vo );
|
||||
|
||||
template<typename T>
|
||||
void to_variant( const std::map<string,T>& var, variant& vo );
|
||||
template<typename T>
|
||||
void from_variant( const variant& var, std::map<string,T>& vo );
|
||||
|
||||
template<typename K, typename T>
|
||||
void to_variant( const std::map<K,T>& var, variant& vo );
|
||||
template<typename K, typename T>
|
||||
void from_variant( const variant& var, std::map<K,T>& vo );
|
||||
|
||||
|
||||
template<typename K, typename T>
|
||||
void to_variant( const std::multimap<K,T>& var, variant& vo );
|
||||
template<typename K, typename T>
|
||||
|
|
@ -401,6 +408,8 @@ namespace fc
|
|||
vo.insert( itr->as< std::pair<K,T> >() );
|
||||
|
||||
}
|
||||
|
||||
|
||||
template<typename K, typename T>
|
||||
void to_variant( const std::map<K, T>& var, variant& vo )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
namespace fc
|
||||
{
|
||||
using std::map;
|
||||
class mutable_variant_object;
|
||||
|
||||
/**
|
||||
|
|
@ -66,6 +67,15 @@ namespace fc
|
|||
|
||||
/** initializes the first key/value pair in the object */
|
||||
variant_object( string key, variant val );
|
||||
|
||||
template<typename T>
|
||||
variant_object( const map<string,T>& values )
|
||||
:_key_value( new std::vector<entry>() ) {
|
||||
_key_value->reserve( values.size() );
|
||||
for( const auto& item : values ) {
|
||||
_key_value->emplace_back( entry( item.first, fc::variant(item.second) ) );
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
variant_object( string key, T&& val )
|
||||
|
|
@ -196,6 +206,15 @@ namespace fc
|
|||
|
||||
mutable_variant_object();
|
||||
|
||||
template<typename T>
|
||||
mutable_variant_object( const map<string,T>& values )
|
||||
:_key_value( new std::vector<entry>() ) {
|
||||
_key_value->reserve( values.size() );
|
||||
for( const auto& item : values ) {
|
||||
_key_value->emplace_back( variant_object::entry( item.first, fc::variant(item.second) ) );
|
||||
}
|
||||
}
|
||||
|
||||
/** initializes the first key/value pair in the object */
|
||||
mutable_variant_object( string key, variant val );
|
||||
template<typename T>
|
||||
|
|
@ -212,6 +231,8 @@ namespace fc
|
|||
mutable_variant_object& operator=( mutable_variant_object&& );
|
||||
mutable_variant_object& operator=( const mutable_variant_object& );
|
||||
mutable_variant_object& operator=( const variant_object& );
|
||||
|
||||
|
||||
private:
|
||||
std::unique_ptr< std::vector< entry > > _key_value;
|
||||
friend class variant_object;
|
||||
|
|
@ -221,4 +242,19 @@ namespace fc
|
|||
/** @ingroup Serializable */
|
||||
void from_variant( const variant& var, mutable_variant_object& vo );
|
||||
|
||||
template<typename T>
|
||||
void to_variant( const std::map<string, T>& var, variant& vo )
|
||||
{
|
||||
vo = variant_object( var );
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void from_variant( const variant& var, std::map<string, T>& vo )
|
||||
{
|
||||
const auto& obj = var.get_object();
|
||||
vo.clear();
|
||||
for( auto itr = obj.begin(); itr != obj.end(); ++itr )
|
||||
vo[itr->key()] = itr->value().as<T>();
|
||||
}
|
||||
|
||||
} // namespace fc
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ std::string websocket_api_connection::on_message(
|
|||
const std::string& message,
|
||||
bool send_message /* = true */ )
|
||||
{
|
||||
wdump((message));
|
||||
try
|
||||
{
|
||||
auto var = fc::json::from_string(message);
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ namespace fc
|
|||
return *this;
|
||||
}
|
||||
|
||||
|
||||
void to_variant( const variant_object& var, variant& vo )
|
||||
{
|
||||
vo = variant(var);
|
||||
|
|
|
|||
2
vendor/websocketpp
vendored
2
vendor/websocketpp
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 378437aecdcb1dfe62096ffd5d944bf1f640ccc3
|
||||
Subproject commit c5510d6de04917812b910a8dd44735c1f17061d9
|
||||
Loading…
Reference in a new issue