Simplify JSON generation.
This commit is contained in:
parent
c9406e71c3
commit
103b0efcaa
@ -58,21 +58,18 @@ static string from_response(const td_api::Object &object, const string &extra, i
|
|||||||
auto buf = StackAllocator::alloc(1 << 18);
|
auto buf = StackAllocator::alloc(1 << 18);
|
||||||
JsonBuilder jb(StringBuilder(buf.as_slice(), true), -1);
|
JsonBuilder jb(StringBuilder(buf.as_slice(), true), -1);
|
||||||
jb.enter_value() << ToJson(object);
|
jb.enter_value() << ToJson(object);
|
||||||
auto slice = jb.string_builder().as_cslice();
|
auto &sb = jb.string_builder();
|
||||||
|
auto slice = sb.as_cslice();
|
||||||
CHECK(!slice.empty() && slice.back() == '}');
|
CHECK(!slice.empty() && slice.back() == '}');
|
||||||
string str;
|
sb.pop_back();
|
||||||
str.reserve(slice.size() + (extra.empty() ? 0 : 10 + extra.size()) + (client_id == 0 ? 0 : 14 + 10));
|
|
||||||
str.append(slice.begin(), slice.size() - 1);
|
|
||||||
if (!extra.empty()) {
|
if (!extra.empty()) {
|
||||||
str += ",\"@extra\":";
|
sb << ",\"@extra\":" << extra;
|
||||||
str += extra;
|
|
||||||
}
|
}
|
||||||
if (client_id != 0) {
|
if (client_id != 0) {
|
||||||
str += ",\"@client_id\":";
|
sb << ",\"@client_id\":" << client_id;
|
||||||
str += to_string(client_id);
|
|
||||||
}
|
}
|
||||||
str += '}';
|
sb << '}';
|
||||||
return str;
|
return sb.as_cslice().str();
|
||||||
}
|
}
|
||||||
|
|
||||||
static TD_THREAD_LOCAL string *current_output;
|
static TD_THREAD_LOCAL string *current_output;
|
||||||
|
@ -27,6 +27,11 @@ class StringBuilder {
|
|||||||
error_flag_ = false;
|
error_flag_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pop_back() {
|
||||||
|
CHECK(current_ptr_ > begin_ptr_);
|
||||||
|
current_ptr_--;
|
||||||
|
}
|
||||||
|
|
||||||
MutableCSlice as_cslice() {
|
MutableCSlice as_cslice() {
|
||||||
if (current_ptr_ >= end_ptr_ + RESERVED_SIZE) {
|
if (current_ptr_ >= end_ptr_ + RESERVED_SIZE) {
|
||||||
std::abort(); // shouldn't happen
|
std::abort(); // shouldn't happen
|
||||||
|
Loading…
Reference in New Issue
Block a user