View in context in the libbitcoin Slack #general mirror.
system::chain::transaction (for example) look like this:
DEFINE_JSON_TO_TAG(transaction)
{
return
{
value.at("version").to_number<uint32_t>(),
value_to<inputs>(value.at("inputs")),
value_to<outputs>(value.at("outputs")),
value.at("locktime").to_number<uint32_t>()
};
}
DEFINE_JSON_FROM_TAG(transaction)
{
value =
{
{ "version", instance.version() },
{ "inputs", value_from(*instance.inputs_ptr()) },
{ "outputs", value_from(*instance.outputs_ptr()) },
{ "locktime", instance.locktime() }
};
}
DEFINE_JSON_TO_TAG(transaction::cptr)
{
return to_shared(tag_invoke(to_tag<transaction>{}, value));
}
DEFINE_JSON_FROM_TAG(transaction::cptr)
{
tag_invoke(from_tag{}, value, *instance);
}