#define dout_subsys ceph_subsys_rgw
-RGWFormatter_Plain::RGWFormatter_Plain()
- : buf(NULL), len(0), max_len(0), min_stack_level(0)
+RGWFormatter_Plain::RGWFormatter_Plain(const bool ukv)
+ : buf(NULL),
+ len(0),
+ max_len(0),
+ min_stack_level(0),
+ use_kv(ukv)
{
}
struct plain_stack_entry new_entry;
new_entry.is_array = true;
new_entry.size = 0;
+
+ if (use_kv && min_stack_level > 0 && !stack.empty()) {
+ struct plain_stack_entry& entry = stack.back();
+
+ if (!entry.is_array)
+ dump_format(name, "");
+ }
+
stack.push_back(new_entry);
}
struct plain_stack_entry new_entry;
new_entry.is_array = false;
new_entry.size = 0;
+
+ if (use_kv && min_stack_level > 0)
+ dump_format(name, "");
+
stack.push_back(new_entry);
}
if (!min_stack_level)
min_stack_level = stack.size();
- bool should_print = (stack.size() == min_stack_level && !entry.size);
+ bool should_print = ((stack.size() == min_stack_level && !entry.size) || use_kv);
entry.size++;
return;
vsnprintf(buf, LARGE_SIZE, fmt, ap);
- if (len)
- format = "\n%s";
- else
- format = "%s";
- write_data(format, buf);
+ const char *eol;
+ if (len) {
+ if (use_kv && entry.is_array && entry.size > 1)
+ eol = ", ";
+ else
+ eol = "\n";
+ } else
+ eol = "";
+
+ if (use_kv && !entry.is_array)
+ write_data("%s%s: %s", eol, name, buf);
+ else
+ write_data("%s%s", eol, buf);
}
int RGWFormatter_Plain::get_len() const
min_stack_level = stack.size();
struct plain_stack_entry& entry = stack.back();
- bool should_print = (stack.size() == min_stack_level && !entry.size);
+ bool should_print = ((stack.size() == min_stack_level && !entry.size) || use_kv);
entry.size++;
else
eol = "";
- write_data("%s%s", eol, buf);
+ if (use_kv && !entry.is_array)
+ write_data("%s%s: %s", eol, name, buf);
+ else
+ write_data("%s%s", eol, buf);
+
}