summaryrefslogtreecommitdiff
path: root/src/buildtool/common/artifact_blob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/common/artifact_blob.cpp')
-rw-r--r--src/buildtool/common/artifact_blob.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/buildtool/common/artifact_blob.cpp b/src/buildtool/common/artifact_blob.cpp
index 8c48d34e..c46e54c6 100644
--- a/src/buildtool/common/artifact_blob.cpp
+++ b/src/buildtool/common/artifact_blob.cpp
@@ -15,7 +15,6 @@
#include "src/buildtool/common/artifact_blob.hpp"
#include <exception>
-#include <optional>
#include "fmt/core.h"
#include "src/buildtool/common/artifact_digest_factory.hpp"
@@ -202,6 +201,21 @@ auto ArtifactBlob::ReadIncrementally(std::size_t chunk_size) const& noexcept
}
}
+auto ArtifactBlob::GetFilePath() const& noexcept
+ -> std::optional<std::filesystem::path> {
+ using Result = std::optional<std::filesystem::path>;
+ static constexpr InPlaceVisitor kVisitor{
+ [](InMemory const&) -> Result { return std::nullopt; },
+ [](InFile const& value) -> Result { return value; },
+ [](InTempFile const& value) -> Result { return value->GetPath(); },
+ };
+ try {
+ return std::visit(kVisitor, content_);
+ } catch (...) {
+ return std::nullopt;
+ }
+}
+
namespace std {
auto hash<ArtifactBlob>::operator()(ArtifactBlob const& blob) const noexcept
-> std::size_t {