diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-08-01 17:44:23 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-11 14:52:07 +0200 |
commit | 2bc6d309c00161b2315b9f98645810699fff3126 (patch) | |
tree | 8185d375463e79b39485448920fa68cca2a206a2 /src/buildtool/common/artifact_description.cpp | |
parent | abae1d3c8032fec872bda44de7f7d754654cf201 (diff) | |
download | justbuild-2bc6d309c00161b2315b9f98645810699fff3126.tar.gz |
Use HashFunction::Type to deserialize ArtifactDescription
Diffstat (limited to 'src/buildtool/common/artifact_description.cpp')
-rw-r--r-- | src/buildtool/common/artifact_description.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/buildtool/common/artifact_description.cpp b/src/buildtool/common/artifact_description.cpp index a36d91e5..e5a67155 100644 --- a/src/buildtool/common/artifact_description.cpp +++ b/src/buildtool/common/artifact_description.cpp @@ -17,7 +17,7 @@ #include <cstddef> #include "nlohmann/json.hpp" -#include "src/buildtool/crypto/hash_function.hpp" +#include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/json.hpp" @@ -42,7 +42,8 @@ namespace { [[nodiscard]] auto CreateLocalArtifactDescription(nlohmann::json const& data) -> std::optional<ArtifactDescription>; -[[nodiscard]] auto CreateKnownArtifactDescription(nlohmann::json const& data) +[[nodiscard]] auto CreateKnownArtifactDescription(HashFunction::Type hash_type, + nlohmann::json const& data) -> std::optional<ArtifactDescription>; [[nodiscard]] auto CreateActionArtifactDescription(nlohmann::json const& data) @@ -79,7 +80,8 @@ auto ArtifactDescription::CreateTree(std::string tree_id) noexcept return ArtifactDescription{std::move(tree_id)}; } -auto ArtifactDescription::FromJson(nlohmann::json const& json) noexcept +auto ArtifactDescription::FromJson(HashFunction::Type hash_type, + nlohmann::json const& json) noexcept -> std::optional<ArtifactDescription> { try { auto const type = ExtractValueAs<std::string>( @@ -107,7 +109,7 @@ auto ArtifactDescription::FromJson(nlohmann::json const& json) noexcept return CreateLocalArtifactDescription(*data); } if (*type == "KNOWN") { - return CreateKnownArtifactDescription(*data); + return CreateKnownArtifactDescription(hash_type, *data); } if (*type == "ACTION") { return CreateActionArtifactDescription(*data); @@ -259,7 +261,8 @@ auto CreateLocalArtifactDescription(nlohmann::json const& data) return std::nullopt; } -auto CreateKnownArtifactDescription(nlohmann::json const& data) +auto CreateKnownArtifactDescription(HashFunction::Type hash_type, + nlohmann::json const& data) -> std::optional<ArtifactDescription> { auto const blob_id = ExtractValueAs<std::string>(data, "id", [](std::string const& error) { @@ -284,9 +287,15 @@ auto CreateKnownArtifactDescription(nlohmann::json const& data) }); if (blob_id.has_value() and size.has_value() and file_type.has_value() and file_type->size() == 1) { - auto const& object_type = FromChar((*file_type)[0]); - ArtifactDigest digest{*blob_id, *size, IsTreeObject(object_type)}; - return ArtifactDescription::CreateKnown(std::move(digest), object_type); + auto const object_type = FromChar((*file_type)[0]); + + auto digest = ArtifactDigestFactory::Create( + hash_type, *blob_id, *size, IsTreeObject(object_type)); + if (not digest) { + return std::nullopt; + } + return ArtifactDescription::CreateKnown(*std::move(digest), + object_type); } return std::nullopt; } |