summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/common/bytestream_utils.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_api/common/bytestream_utils.hpp')
-rw-r--r--src/buildtool/execution_api/common/bytestream_utils.hpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/common/bytestream_utils.hpp b/src/buildtool/execution_api/common/bytestream_utils.hpp
index c28c9627..9b46073f 100644
--- a/src/buildtool/execution_api/common/bytestream_utils.hpp
+++ b/src/buildtool/execution_api/common/bytestream_utils.hpp
@@ -16,11 +16,51 @@
#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_BYTESTREAM_UTILS_HPP
#include <cstddef>
+#include <cstdint>
+#include <optional>
+#include <string>
+
+namespace build::bazel::remote::execution::v2 {
+class Digest;
+}
+namespace bazel_re = build::bazel::remote::execution::v2;
class ByteStreamUtils final {
+ static constexpr auto* kBlobs = "blobs";
+
public:
// Chunk size for uploads (default size used by BuildBarn)
static constexpr std::size_t kChunkSize = 64 * 1024;
+
+ /// \brief Create a read request for the bytestream service to be
+ /// transferred over the net. Handles serialization/deserialization on its
+ /// own. The pattern is:
+ /// "{instance_name}/{kBlobs}/{digest.hash()}/{digest.size_bytes()}".
+ /// "instance_name_example/blobs/62183d7a696acf7e69e218efc82c93135f8c85f895/4424712"
+ class ReadRequest final {
+ public:
+ explicit ReadRequest(std::string instance_name,
+ bazel_re::Digest const& digest) noexcept;
+
+ [[nodiscard]] auto ToString() && noexcept -> std::string;
+
+ [[nodiscard]] static auto FromString(
+ std::string const& request) noexcept -> std::optional<ReadRequest>;
+
+ [[nodiscard]] auto GetInstanceName() const noexcept
+ -> std::string const& {
+ return instance_name_;
+ }
+
+ [[nodiscard]] auto GetDigest() const noexcept -> bazel_re::Digest;
+
+ private:
+ std::string instance_name_;
+ std::string hash_;
+ std::int64_t size_ = 0;
+
+ ReadRequest() = default;
+ };
};
#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_BYTESTREAM_UTILS_HPP