summaryrefslogtreecommitdiff
path: root/src/buildtool/common/artifact_blob.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-02-25 12:20:44 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-27 09:03:30 +0100
commiteccc7dcfb22fb9c6c42bbcd5566cd044acd1a2f3 (patch)
tree830878c48961c8434b3f6abf0589870d72c18476 /src/buildtool/common/artifact_blob.cpp
parentb3c6d3572784575811ff130d859e92b799e77bb3 (diff)
downloadjustbuild-eccc7dcfb22fb9c6c42bbcd5566cd044acd1a2f3.tar.gz
ArtifactBlob: Support construction in memory
Diffstat (limited to 'src/buildtool/common/artifact_blob.cpp')
-rw-r--r--src/buildtool/common/artifact_blob.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/buildtool/common/artifact_blob.cpp b/src/buildtool/common/artifact_blob.cpp
index 3b199e5e..c25e1db1 100644
--- a/src/buildtool/common/artifact_blob.cpp
+++ b/src/buildtool/common/artifact_blob.cpp
@@ -14,8 +14,35 @@
#include "src/buildtool/common/artifact_blob.hpp"
+#include <exception>
+
+#include "fmt/core.h"
+#include "src/buildtool/common/artifact_digest_factory.hpp"
#include "src/utils/cpp/hash_combine.hpp"
+auto ArtifactBlob::FromMemory(HashFunction hash_function,
+ ObjectType type,
+ std::string content) noexcept
+ -> expected<ArtifactBlob, std::string> {
+ try {
+ auto digest = IsTreeObject(type)
+ ? ArtifactDigestFactory::HashDataAs<ObjectType::Tree>(
+ hash_function, content)
+ : ArtifactDigestFactory::HashDataAs<ObjectType::File>(
+ hash_function, content);
+ return ArtifactBlob{
+ std::move(digest),
+ std::make_shared<std::string const>(std::move(content)),
+ IsExecutableObject(type)};
+ } catch (const std::exception& e) {
+ return unexpected{fmt::format(
+ "ArtifactBlob::FromMemory: Got an exception:\n{}", e.what())};
+ } catch (...) {
+ return unexpected<std::string>{
+ "ArtifactBlob::FromMemory: Got an unknown exception"};
+ }
+}
+
auto ArtifactBlob::ReadContent() const noexcept
-> std::shared_ptr<std::string const> {
return content_;