diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-25 12:20:44 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-27 09:03:30 +0100 |
commit | eccc7dcfb22fb9c6c42bbcd5566cd044acd1a2f3 (patch) | |
tree | 830878c48961c8434b3f6abf0589870d72c18476 /src/buildtool/common/artifact_blob.cpp | |
parent | b3c6d3572784575811ff130d859e92b799e77bb3 (diff) | |
download | justbuild-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.cpp | 27 |
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_; |