blob: 748329fcfb3900aae477ee99ec715d43271db872 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "iceberg/puffin/file_metadata.h"
#include <format>
#include <utility>
#include "iceberg/util/formatter_internal.h"
namespace iceberg::puffin {
namespace {
constexpr std::string_view kLz4CodecName = "lz4";
constexpr std::string_view kZstdCodecName = "zstd";
} // namespace
std::string_view CodecName(PuffinCompressionCodec codec) {
switch (codec) {
case PuffinCompressionCodec::kNone:
return "";
case PuffinCompressionCodec::kLz4:
return kLz4CodecName;
case PuffinCompressionCodec::kZstd:
return kZstdCodecName;
}
std::unreachable();
}
Result<PuffinCompressionCodec> PuffinCompressionCodecFromName(
std::string_view codec_name) {
if (codec_name.empty()) {
return PuffinCompressionCodec::kNone;
}
if (codec_name == kLz4CodecName) {
return PuffinCompressionCodec::kLz4;
}
if (codec_name == kZstdCodecName) {
return PuffinCompressionCodec::kZstd;
}
return InvalidArgument("Unknown codec name: {}", codec_name);
}
std::string ToString(PuffinCompressionCodec codec) {
return std::string(CodecName(codec));
}
std::string ToString(const Blob& blob) {
std::string repr = "Blob[";
std::format_to(std::back_inserter(repr), "type='{}',inputFields={},", blob.type,
blob.input_fields);
std::format_to(std::back_inserter(repr), "snapshotId={},sequenceNumber={},",
blob.snapshot_id, blob.sequence_number);
std::format_to(std::back_inserter(repr), "dataSize={}", blob.data.size());
if (blob.requested_compression.has_value()) {
std::format_to(std::back_inserter(repr), ",requestedCompression={}",
ToString(*blob.requested_compression));
}
if (!blob.properties.empty()) {
std::format_to(std::back_inserter(repr), ",properties={}", blob.properties);
}
std::format_to(std::back_inserter(repr), "]");
return repr;
}
std::string ToString(const BlobMetadata& blob_metadata) {
std::string repr = "BlobMetadata[";
std::format_to(std::back_inserter(repr), "type='{}',inputFields={},",
blob_metadata.type, blob_metadata.input_fields);
std::format_to(std::back_inserter(repr), "snapshotId={},sequenceNumber={},",
blob_metadata.snapshot_id, blob_metadata.sequence_number);
std::format_to(std::back_inserter(repr), "offset={},length={}", blob_metadata.offset,
blob_metadata.length);
if (!blob_metadata.compression_codec.empty()) {
std::format_to(std::back_inserter(repr), ",compressionCodec='{}'",
blob_metadata.compression_codec);
}
if (!blob_metadata.properties.empty()) {
std::format_to(std::back_inserter(repr), ",properties={}", blob_metadata.properties);
}
std::format_to(std::back_inserter(repr), "]");
return repr;
}
std::string ToString(const FileMetadata& file_metadata) {
std::string repr = "FileMetadata[";
std::format_to(std::back_inserter(repr), "blobs=[");
for (size_t i = 0; i < file_metadata.blobs.size(); ++i) {
if (i > 0) {
std::format_to(std::back_inserter(repr), ",");
}
std::format_to(std::back_inserter(repr), "{}", ToString(file_metadata.blobs[i]));
}
std::format_to(std::back_inserter(repr), "]");
if (!file_metadata.properties.empty()) {
std::format_to(std::back_inserter(repr), ",properties={}", file_metadata.properties);
}
std::format_to(std::back_inserter(repr), "]");
return repr;
}
} // namespace iceberg::puffin