void json_rpc_database_fixture::review_answer( fc::variant& answer, int64_t code, bool is_warning, bool is_fail, fc::optional< fc::variant > id ) { fc::variant_object error; int64_t answer_code; if( is_fail ) { if( id.valid() && code != JSON_RPC_INVALID_REQUEST ) { BOOST_REQUIRE( answer.get_object().contains( "id" ) ); check_id_equal( answer[ "id" ], *id ); } BOOST_REQUIRE( answer.get_object().contains( "error" ) ); BOOST_REQUIRE( answer["error"].is_object() ); error = answer["error"].get_object(); BOOST_REQUIRE( error.contains( "code" ) ); BOOST_REQUIRE( error["code"].is_int64() ); answer_code = error["code"].as_int64(); BOOST_REQUIRE( answer_code == code ); if( is_warning ) BOOST_TEST_MESSAGE( error["message"].as_string() ); } else { BOOST_REQUIRE( answer.get_object().contains( "result" ) ); BOOST_REQUIRE( answer.get_object().contains( "id" ) ); if( id.valid() ) check_id_equal( answer[ "id" ], *id ); } }
virtual void from_variant( const fc::variant& in, bts::blockchain::operation& output ) { try { auto obj = in.get_object(); FC_ASSERT( output.type == OperationType::type ); output.data = fc::raw::pack( obj["data"].as<OperationType>() ); } FC_RETHROW_EXCEPTIONS( warn, "type: ${type}", ("type",fc::get_typename<OperationType>::name()) ) }
void from_variant( const fc::variant& var, graphene::chain::extension<T>& value, uint32_t max_depth ) { value = graphene::chain::extension<T>(); if( var.is_null() ) return; if( var.is_array() ) { FC_ASSERT( var.size() == 0 ); return; } graphene_extension_from_variant_visitor<T> vtor( var.get_object(), value.value, max_depth ); fc::reflector<T>::visit( vtor ); FC_ASSERT( vtor.count_left == 0 ); // unrecognized extension throws here }
static inline void from_variant( const fc::variant& v, T& o, uint32_t max_depth ) { const variant_object& vo = v.get_object(); fc::reflector<T>::visit( from_variant_visitor<T>( vo, o, max_depth ) ); }
static inline void from_variant( const fc::variant& v, T& o ) { const variant_object& vo = v.get_object(); fc::reflector<T>::visit( from_variant_visitor<T>( vo, o ) ); }