map<int, string> temp_url_keys;
string bucket_id;
string new_bucket_name;
- Formatter *formatter = NULL;
- Formatter *zone_formatter = nullptr;
+ std::unique_ptr<Formatter> formatter;
+ std::unique_ptr<Formatter> zone_formatter;
int purge_data = false;
int pretty_format = false;
int show_log_entries = true;
}
if (format == "xml")
- formatter = new XMLFormatter(pretty_format);
+ formatter = make_unique<XMLFormatter>(new XMLFormatter(pretty_format));
else if (format == "json")
- formatter = new JSONFormatter(pretty_format);
+ formatter = make_unique<JSONFormatter>(new JSONFormatter(pretty_format));
else {
cerr << "unrecognized format: " << format << std::endl;
exit(1);
}
- zone_formatter = new JSONFormatter_PrettyZone(pretty_format);
+ zone_formatter = std::make_unique<JSONFormatter_PrettyZone>(new JSONFormatter_PrettyZone(pretty_format));
realm_name = g_conf()->rgw_realm;
zone_name = g_conf()->rgw_zone;
zonegroup_name = g_conf()->rgw_zonegroup;
- RGWStreamFlusher f(formatter, cout);
+ RGWStreamFlusher f(formatter.get(), cout);
// not a raw op if 'period update' needs to commit to master
bool raw_period_update = opt_cmd == OPT::PERIOD_UPDATE && !commit;
cerr << "period init failed: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("period", period, formatter);
+ encode_json("period", period, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
formatter->open_object_section("period_get_current");
- encode_json("current_period", period_id, formatter);
+ encode_json("current_period", period_id, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
return -ret;
}
formatter->open_object_section("periods_list");
- encode_json("periods", periods, formatter);
+ encode_json("periods", periods, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
{
int ret = update_period(realm_id, realm_name, period_id, period_epoch,
commit, remote, url, access_key, secret_key,
- formatter, yes_i_really_mean_it);
+ formatter.get(), yes_i_really_mean_it);
if (ret < 0) {
return -ret;
}
return -ret;
}
- encode_json("period", period, formatter);
+ encode_json("period", period, formatter.get());
formatter->flush(cout);
}
break;
set_quota_info(period_config.bucket_quota, opt_cmd,
max_size, max_objects,
have_max_size, have_max_objects);
- encode_json("bucket quota", period_config.bucket_quota, formatter);
+ encode_json("bucket quota", period_config.bucket_quota, formatter.get());
} else if (quota_scope == "user") {
set_quota_info(period_config.user_quota, opt_cmd,
max_size, max_objects,
have_max_size, have_max_objects);
- encode_json("user quota", period_config.user_quota, formatter);
+ encode_json("user quota", period_config.user_quota, formatter.get());
} else if (quota_scope.empty() && opt_cmd == OPT::GLOBAL_QUOTA_GET) {
// if no scope is given for GET, print both
- encode_json("bucket quota", period_config.bucket_quota, formatter);
- encode_json("user quota", period_config.user_quota, formatter);
+ encode_json("bucket quota", period_config.bucket_quota, formatter.get());
+ encode_json("user quota", period_config.user_quota, formatter.get());
} else {
cerr << "ERROR: invalid quota scope specification. Please specify "
"either --quota-scope=bucket, or --quota-scope=user" << std::endl;
}
}
- encode_json("realm", realm, formatter);
+ encode_json("realm", realm, formatter.get());
formatter->flush(cout);
}
break;
}
return -ret;
}
- encode_json("realm", realm, formatter);
+ encode_json("realm", realm, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
formatter->open_object_section("realms_list");
- encode_json("default_info", default_id, formatter);
- encode_json("realms", realms, formatter);
+ encode_json("default_info", default_id, formatter.get());
+ encode_json("realms", realms, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
return -ret;
}
formatter->open_object_section("realm_periods_list");
- encode_json("current_period", period_id, formatter);
- encode_json("periods", periods, formatter);
+ encode_json("current_period", period_id, formatter.get());
+ encode_json("periods", periods, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
cerr << "failed to set realm " << realm_name << " as default: " << cpp_strerror(-ret) << std::endl;
}
}
- encode_json("realm", realm, formatter);
+ encode_json("realm", realm, formatter.get());
formatter->flush(cout);
}
break;
}
}
- encode_json("realm", realm, formatter);
+ encode_json("realm", realm, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
}
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
cerr << "could not determine default zonegroup: " << cpp_strerror(-ret) << std::endl;
}
formatter->open_object_section("zonegroups_list");
- encode_json("default_info", default_zonegroup, formatter);
- encode_json("zonegroups", zonegroups, formatter);
+ encode_json("default_info", default_zonegroup, formatter.get());
+ encode_json("zonegroups", zonegroups, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
}
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
}
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("zonegroup", zonegroup, formatter);
+ encode_json("zonegroup", zonegroup, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("placement_targets", zonegroup.placement_targets, formatter);
+ encode_json("placement_targets", zonegroup.placement_targets, formatter.get());
formatter->flush(cout);
}
break;
cerr << "failed to find a zonegroup placement target named '" << placement_id << "'" << std::endl;
return -ENOENT;
}
- encode_json("placement_targets", p->second, formatter);
+ encode_json("placement_targets", p->second, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("placement_targets", zonegroup.placement_targets, formatter);
+ encode_json("placement_targets", zonegroup.placement_targets, formatter.get());
formatter->flush(cout);
}
break;
}
}
- encode_json("zone", zone, formatter);
+ encode_json("zone", zone, formatter.get());
formatter->flush(cout);
}
break;
cerr << "unable to initialize zone: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("zone", zone, formatter);
+ encode_json("zone", zone, formatter.get());
formatter->flush(cout);
}
break;
}
}
- encode_json("zone", zone, formatter);
+ encode_json("zone", zone, formatter.get());
formatter->flush(cout);
}
break;
cerr << "could not determine default zone: " << cpp_strerror(-ret) << std::endl;
}
formatter->open_object_section("zones_list");
- encode_json("default_info", default_zone, formatter);
- encode_json("zones", zones, formatter);
+ encode_json("default_info", default_zone, formatter.get());
+ encode_json("zones", zones, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
}
}
- encode_json("zone", zone, formatter);
+ encode_json("zone", zone, formatter.get());
formatter->flush(cout);
}
break;
return -ret;
}
- encode_json("zone", zone, formatter);
+ encode_json("zone", zone, formatter.get());
formatter->flush(cout);
}
break;
cerr << "unable to initialize zone: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("placement_pools", zone.placement_pools, formatter);
+ encode_json("placement_pools", zone.placement_pools, formatter.get());
formatter->flush(cout);
}
break;
cerr << "ERROR: zone placement target '" << placement_id << "' not found" << std::endl;
return -ENOENT;
}
- encode_json("placement_pools", p->second, formatter);
+ encode_json("placement_pools", p->second, formatter.get());
formatter->flush(cout);
}
default:
{
int ret = update_period(realm_id, realm_name, period_id, period_epoch,
commit, remote, url, access_key, secret_key,
- formatter, yes_i_really_mean_it);
+ formatter.get(), yes_i_really_mean_it);
if (ret < 0) {
return -ret;
}
return -ret;
}
- encode_json("period", period, formatter);
+ encode_json("period", period, formatter.get());
formatter->flush(cout);
}
return 0;
if (ret < 0) {
return -ret;
}
- show_role_info(role, formatter);
+ show_role_info(role, formatter.get());
return 0;
}
case OPT::ROLE_DELETE:
if (ret < 0) {
return -ret;
}
- show_role_info(role, formatter);
+ show_role_info(role, formatter.get());
return 0;
}
case OPT::ROLE_MODIFY:
if (ret < 0) {
return -ret;
}
- show_roles_info(result, formatter);
+ show_roles_info(result, formatter.get());
return 0;
}
case OPT::ROLE_POLICY_PUT:
return -ret;
}
std::vector<string> policy_names = role.get_role_policy_names();
- show_policy_names(policy_names, formatter);
+ show_policy_names(policy_names, formatter.get());
return 0;
}
case OPT::ROLE_POLICY_GET:
if (ret < 0) {
return -ret;
}
- show_perm_policy(perm_policy, formatter);
+ show_perm_policy(perm_policy, formatter.get());
return 0;
}
case OPT::ROLE_POLICY_DELETE:
cerr << "could not fetch user info: " << err_msg << std::endl;
return -ret;
}
- show_user_info(info, formatter);
+ show_user_info(info, formatter.get());
}
if (opt_cmd == OPT::POLICY) {
for (vector<rgw_bucket_dir_entry>::iterator iter = result.begin(); iter != result.end(); ++iter) {
rgw_bucket_dir_entry& entry = *iter;
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
}
formatter->flush(cout);
} while (truncated && count < max_entries);
if (show_log_entries) {
- rgw_format_ops_log_entry(entry, formatter);
+ rgw_format_ops_log_entry(entry, formatter.get());
formatter->flush(cout);
}
next:
cerr << "ERROR: failed reading olh: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("olh", olh, formatter);
+ encode_json("olh", olh, formatter.get());
formatter->flush(cout);
}
return -ret;
}
formatter->open_object_section("result");
- encode_json("is_truncated", is_truncated, formatter);
- encode_json("log", log, formatter);
+ encode_json("is_truncated", is_truncated, formatter.get());
+ encode_json("log", log, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
return -ret;
}
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
formatter->flush(cout);
}
list<rgw_cls_bi_entry>::iterator iter;
for (iter = entries.begin(); iter != entries.end(); ++iter) {
rgw_cls_bi_entry& entry = *iter;
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
marker = entry.idx;
}
formatter->flush(cout);
}
return br.execute(num_shards, max_entries,
- verbose, &cout, formatter);
+ verbose, &cout, formatter.get());
}
if (opt_cmd == OPT::RESHARD_ADD) {
}
for (auto iter=entries.begin(); iter != entries.end(); ++iter) {
cls_rgw_reshard_entry& entry = *iter;
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
entry.get_key(&marker);
}
count += entries.size();
return -r;
}
- show_reshard_status(status, formatter);
+ show_reshard_status(status, formatter.get());
}
if (opt_cmd == OPT::RESHARD_PROCESS) {
bufferlist& bl = iter->second;
bool handled = false;
if (iter->first == RGW_ATTR_MANIFEST) {
- handled = decode_dump<RGWObjManifest>("manifest", bl, formatter);
+ handled = decode_dump<RGWObjManifest>("manifest", bl, formatter.get());
} else if (iter->first == RGW_ATTR_ACL) {
- handled = decode_dump<RGWAccessControlPolicy>("policy", bl, formatter);
+ handled = decode_dump<RGWAccessControlPolicy>("policy", bl, formatter.get());
} else if (iter->first == RGW_ATTR_ID_TAG) {
- handled = dump_string("tag", bl, formatter);
+ handled = dump_string("tag", bl, formatter.get());
} else if (iter->first == RGW_ATTR_ETAG) {
- handled = dump_string("etag", bl, formatter);
+ handled = dump_string("etag", bl, formatter.get());
} else if (iter->first == RGW_ATTR_COMPRESSION) {
- handled = decode_dump<RGWCompressionInfo>("compression", bl, formatter);
+ handled = decode_dump<RGWCompressionInfo>("compression", bl, formatter.get());
} else if (iter->first == RGW_ATTR_DELETE_AT) {
- handled = decode_dump<utime_t>("delete_at", bl, formatter);
+ handled = decode_dump<utime_t>("delete_at", bl, formatter.get());
}
if (!handled)
formatter->open_object_section("attrs");
for (iter = other_attrs.begin(); iter != other_attrs.end(); ++iter) {
- dump_string(iter->first.c_str(), iter->second, formatter);
+ dump_string(iter->first.c_str(), iter->second, formatter.get());
}
formatter->close_section();
formatter->close_section();
cerr << "ERROR: need to specify bucket name" << std::endl;
return EINVAL;
}
- do_check_object_locator(tenant, bucket_name, fix, remove_bad, formatter);
+ do_check_object_locator(tenant, bucket_name, fix, remove_bad, formatter.get());
} else {
RGWBucketAdminOp::check_index(store, bucket_op, f, null_yield);
}
cls_rgw_obj_chain& chain = info.chain;
for (liter = chain.objs.begin(); liter != chain.objs.end(); ++liter) {
cls_rgw_obj& obj = *liter;
- encode_json("obj", obj, formatter);
+ encode_json("obj", obj, formatter.get());
}
formatter->close_section(); // objs
formatter->close_section(); // obj_chain
return -EIO;
}
- encode_json("result", config, formatter);
+ encode_json("result", config, formatter.get());
formatter->flush(cout);
}
if (!extra_info){
formatter->dump_string("job-id",it.first);
} else {
- encode_json("orphan_search_state", it.second, formatter);
+ encode_json("orphan_search_state", it.second, formatter.get());
}
}
formatter->close_section();
{
Formatter::ObjectSection os(*formatter, "result");
- encode_json("stats", stats, formatter);
+ encode_json("stats", stats, formatter.get());
utime_t last_sync_ut(last_stats_sync);
- encode_json("last_stats_sync", last_sync_ut, formatter);
+ encode_json("last_stats_sync", last_sync_ut, formatter.get());
utime_t last_update_ut(last_stats_update);
- encode_json("last_stats_update", last_update_ut, formatter);
+ encode_json("last_stats_update", last_update_ut, formatter.get());
}
formatter->flush(cout);
}
if (opt_cmd == OPT::METADATA_GET) {
- int ret = store->ctl()->meta.mgr->get(metadata_key, formatter, null_yield);
+ int ret = store->ctl()->meta.mgr->get(metadata_key, formatter.get(), null_yield);
if (ret < 0) {
cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl;
return -ret;
formatter->close_section();
if (max_entries_specified) {
- encode_json("truncated", truncated, formatter);
- encode_json("count", count, formatter);
+ encode_json("truncated", truncated, formatter.get());
+ encode_json("count", count, formatter.get());
if (truncated) {
- encode_json("marker", store->ctl()->meta.mgr->get_marker(handle), formatter);
+ encode_json("marker", store->ctl()->meta.mgr->get_marker(handle), formatter.get());
}
formatter->close_section();
}
for (list<cls_log_entry>::iterator iter = entries.begin(); iter != entries.end(); ++iter) {
cls_log_entry& entry = *iter;
- store->ctl()->meta.mgr->dump_log_entry(entry, formatter);
+ store->ctl()->meta.mgr->dump_log_entry(entry, formatter.get());
}
formatter->flush(cout);
} while (truncated);
RGWMetadataLogInfo info;
meta_log->get_info(i, &info);
- ::encode_json("info", info, formatter);
+ ::encode_json("info", info, formatter.get());
if (specified_shard_id)
break;
}
if (opt_cmd == OPT::SYNC_INFO) {
- sync_info(opt_effective_zone_id, opt_bucket, zone_formatter);
+ sync_info(opt_effective_zone_id, opt_bucket, zone_formatter.get());
}
if (opt_cmd == OPT::SYNC_STATUS) {
- sync_status(formatter);
+ sync_status(formatter.get());
}
if (opt_cmd == OPT::METADATA_SYNC_STATUS) {
}
formatter->open_object_section("summary");
- encode_json("sync_status", sync_status, formatter);
+ encode_json("sync_status", sync_status, formatter.get());
uint64_t full_total = 0;
uint64_t full_complete = 0;
}
formatter->open_object_section("full_sync");
- encode_json("total", full_total, formatter);
- encode_json("complete", full_complete, formatter);
+ encode_json("total", full_total, formatter.get());
+ encode_json("complete", full_complete, formatter.get());
formatter->close_section();
formatter->close_section();
return -ret;
}
formatter->open_object_section("summary");
- encode_json("shard_id", shard_id, formatter);
- encode_json("marker", sync_marker, formatter);
- encode_json("pending_buckets", pending_buckets, formatter);
- encode_json("recovering_buckets", recovering_buckets, formatter);
+ encode_json("shard_id", shard_id, formatter.get());
+ encode_json("marker", sync_marker, formatter.get());
+ encode_json("pending_buckets", pending_buckets, formatter.get());
+ encode_json("recovering_buckets", recovering_buckets, formatter.get());
formatter->close_section();
formatter->flush(cout);
} else {
}
formatter->open_object_section("summary");
- encode_json("sync_status", sync_status, formatter);
+ encode_json("sync_status", sync_status, formatter.get());
uint64_t full_total = 0;
uint64_t full_complete = 0;
}
formatter->open_object_section("full_sync");
- encode_json("total", full_total, formatter);
- encode_json("complete", full_complete, formatter);
+ encode_json("total", full_total, formatter.get());
+ encode_json("complete", full_complete, formatter.get());
formatter->close_section();
formatter->close_section();
map<int, rgw_bucket_shard_sync_info>& sync_status = sync.get_sync_status();
- encode_json("sync_status", sync_status, formatter);
+ encode_json("sync_status", sync_status, formatter.get());
formatter->flush(cout);
}
for (list<rgw_bi_log_entry>::iterator iter = entries.begin(); iter != entries.end(); ++iter) {
rgw_bi_log_entry& entry = *iter;
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
marker = entry.id;
}
for (; shard_id < ERROR_LOGGER_SHARDS; ++shard_id) {
formatter->open_object_section("shard");
- encode_json("shard_id", shard_id, formatter);
+ encode_json("shard_id", shard_id, formatter.get());
formatter->open_array_section("entries");
int count = 0;
continue;
}
formatter->open_object_section("entry");
- encode_json("id", cls_entry.id, formatter);
- encode_json("section", cls_entry.section, formatter);
- encode_json("name", cls_entry.name, formatter);
- encode_json("timestamp", cls_entry.timestamp, formatter);
- encode_json("info", log_entry, formatter);
+ encode_json("id", cls_entry.id, formatter.get());
+ encode_json("section", cls_entry.section, formatter.get());
+ encode_json("name", cls_entry.name, formatter.get());
+ encode_json("timestamp", cls_entry.timestamp, formatter.get());
+ encode_json("info", log_entry, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
return -ret;
}
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::SYNC_GROUP_GET) {
auto& groups = sync_policy.groups;
if (!opt_group_id) {
- show_result(groups, zone_formatter, cout);
+ show_result(groups, zone_formatter.get(), cout);
} else {
auto iter = sync_policy.groups.find(*opt_group_id);
if (iter == sync_policy.groups.end()) {
return ENOENT;
}
- show_result(iter->second, zone_formatter, cout);
+ show_result(iter->second, zone_formatter.get(), cout);
}
}
}
{
- Formatter::ObjectSection os(*zone_formatter, "result");
- encode_json("sync_policy", sync_policy, zone_formatter);
+ Formatter::ObjectSection os(*zone_formatter.get(), "result");
+ encode_json("sync_policy", sync_policy, zone_formatter.get());
}
zone_formatter->flush(cout);
return -ret;
}
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::SYNC_GROUP_FLOW_REMOVE) {
return -ret;
}
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::SYNC_GROUP_PIPE_CREATE ||
return -ret;
}
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::SYNC_GROUP_PIPE_REMOVE) {
return -ret;
}
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::SYNC_POLICY_GET) {
}
auto& sync_policy = sync_policy_ctx.get_policy();
- show_result(sync_policy, zone_formatter, cout);
+ show_result(sync_policy, zone_formatter.get(), cout);
}
if (opt_cmd == OPT::BILOG_TRIM) {
return -ret;
}
formatter->open_object_section("entries");
- encode_json("markers", markers, formatter);
+ encode_json("markers", markers, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
for (list<rgw_data_change_log_entry>::iterator iter = entries.begin(); iter != entries.end(); ++iter) {
rgw_data_change_log_entry& entry = *iter;
if (!extra_info) {
- encode_json("entry", entry.entry, formatter);
+ encode_json("entry", entry.entry, formatter.get());
} else {
- encode_json("entry", entry, formatter);
+ encode_json("entry", entry, formatter.get());
}
}
- formatter->flush(cout);
+ formatter.get()->flush(cout);
} while (truncated && count < max_entries);
formatter->close_section();
RGWDataChangesLogInfo info;
store->svc()->datalog_rados->get_info(i, &info);
- ::encode_json("info", info, formatter);
+ ::encode_json("info", info, formatter.get());
if (specified_shard_id)
break;
return -ret;
}
formatter->open_object_section("result");
- encode_json("entry", result, formatter);
+ encode_json("entry", result, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
return -ret;
}
formatter->open_object_section("result");
- encode_json("entries", result, formatter);
+ encode_json("entries", result, formatter.get());
formatter->close_section();
formatter->flush(cout);
}
cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("result", result, formatter);
+ encode_json("result", result, formatter.get());
} else {
rgw_pubsub_user_topics result;
int ret = ups.get_user_topics(&result);
cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("result", result, formatter);
+ encode_json("result", result, formatter.get());
}
formatter->flush(cout);
}
cerr << "ERROR: could not get topic: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("topic", topic, formatter);
+ encode_json("topic", topic, formatter.get());
formatter->flush(cout);
}
cerr << "ERROR: could not get subscription info: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("sub", sub_conf, formatter);
+ encode_json("sub", sub_conf, formatter.get());
formatter->flush(cout);
}
cerr << "ERROR: could not list events: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("result", *sub, formatter);
+ encode_json("result", *sub, formatter.get());
formatter->flush(cout);
}