| 337 | } |
| 338 | |
| 339 | JSONCONS_VISITOR_RETURN_TYPE visit_end_object(const ser_context&, std::error_code& ec) override |
| 340 | { |
| 341 | JSONCONS_ASSERT(!stack_.empty()); |
| 342 | |
| 343 | switch (stack_.back().item_kind_) |
| 344 | { |
| 345 | case stack_item_kind::flat_object: |
| 346 | case stack_item_kind::object: |
| 347 | if (parent(stack_).item_kind_ == stack_item_kind::row_mapping || parent(stack_).item_kind_ == stack_item_kind::flat_row_mapping) |
| 348 | { |
| 349 | if (stack_[0].count_ == 0) |
| 350 | { |
| 351 | bool first = true; |
| 352 | for (std::size_t i = 0; i < column_paths_.size(); ++i) |
| 353 | { |
| 354 | auto it = column_path_name_map_.find(column_paths_[i]); |
| 355 | if (it != column_path_name_map_.end()) |
| 356 | { |
| 357 | if (!first) |
| 358 | { |
| 359 | sink_.push_back(field_delimiter_); |
| 360 | } |
| 361 | else |
| 362 | { |
| 363 | first = false; |
| 364 | } |
| 365 | sink_.append(it->second.data(), it->second.length()); |
| 366 | } |
| 367 | } |
| 368 | sink_.append(line_delimiter_.data(), line_delimiter_.length()); |
| 369 | } |
| 370 | for (std::size_t i = 0; i < column_paths_.size(); ++i) |
| 371 | { |
| 372 | if (i > 0) |
| 373 | { |
| 374 | sink_.push_back(field_delimiter_); |
| 375 | } |
| 376 | auto it = column_path_value_map_.find(column_paths_[i]); |
| 377 | if (it != column_path_value_map_.end()) |
| 378 | { |
| 379 | sink_.append(it->second.data(), it->second.length()); |
| 380 | it->second.clear(); |
| 381 | } |
| 382 | } |
| 383 | sink_.append(line_delimiter_.data(), line_delimiter_.length()); |
| 384 | } |
| 385 | break; |
| 386 | case stack_item_kind::column_mapping: |
| 387 | { |
| 388 | // Write header |
| 389 | { |
| 390 | bool first = true; |
| 391 | for (std::size_t i = 0; i < column_paths_.size(); ++i) |
| 392 | { |
| 393 | auto it = column_path_name_map_.find(column_paths_[i]); |
| 394 | if (it != column_path_name_map_.end()) |
| 395 | { |
| 396 | if (!first) |