| 138 | } |
| 139 | |
| 140 | void WriteKeyValueMetadata( |
| 141 | const std::shared_ptr<const KeyValueMetadata>& metadata, |
| 142 | const std::vector<std::pair<std::string, std::string>>& additional_metadata = {}) { |
| 143 | if ((metadata == nullptr || metadata->size() == 0) && additional_metadata.empty()) { |
| 144 | return; |
| 145 | } |
| 146 | writer_->Key("metadata"); |
| 147 | |
| 148 | writer_->StartArray(); |
| 149 | if (metadata != nullptr) { |
| 150 | for (auto [key, value] : Zip(metadata->keys(), metadata->values())) { |
| 151 | WriteKeyValue(key, value); |
| 152 | } |
| 153 | } |
| 154 | for (const auto& [key, value] : additional_metadata) { |
| 155 | WriteKeyValue(key, value); |
| 156 | } |
| 157 | writer_->EndArray(); |
| 158 | } |
| 159 | |
| 160 | void WriteKeyValue(const std::string& key, const std::string& value) { |
| 161 | writer_->StartObject(); |