From 32c865dce37ff18d796caa9f3cd760eb22edd8f5 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Fri, 20 Dec 2024 12:47:39 +0100 Subject: Pack BackendDescription to a class ...to let it be stored as an independent instance. --- src/buildtool/storage/backend_description.hpp | 41 +++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'src/buildtool/storage/backend_description.hpp') diff --git a/src/buildtool/storage/backend_description.hpp b/src/buildtool/storage/backend_description.hpp index c1ef17d7..9d912930 100644 --- a/src/buildtool/storage/backend_description.hpp +++ b/src/buildtool/storage/backend_description.hpp @@ -15,18 +15,47 @@ #ifndef INCLUDED_SRC_BUILDTOOL_STORAGE_BACKEND_DESCRIPTION_HPP #define INCLUDED_SRC_BUILDTOOL_STORAGE_BACKEND_DESCRIPTION_HPP +#include #include #include +#include #include +#include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/remote/remote_common.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/utils/cpp/expected.hpp" -/// \brief String representation of the used execution backend. -[[nodiscard]] auto DescribeBackend( - std::optional const& address, - ExecutionProperties const& properties, - std::vector const& dispatch) noexcept - -> expected; +class BackendDescription final { + public: + explicit BackendDescription() noexcept; + + /// \brief String representation of the used execution backend. + [[nodiscard]] static auto Describe( + std::optional const& address, + ExecutionProperties const& properties, + std::vector const& dispatch) noexcept + -> expected; + + [[nodiscard]] auto GetDescription() const noexcept -> std::string const& { + return *description_; + } + + [[nodiscard]] auto HashContent(HashFunction hash_function) const noexcept + -> ArtifactDigest; + + [[nodiscard]] auto operator==( + BackendDescription const& other) const noexcept -> bool { + return sha256_ == other.sha256_ or *sha256_ == *other.sha256_; + } + + private: + explicit BackendDescription(std::shared_ptr description, + std::shared_ptr sha256) noexcept + : description_{std::move(description)}, sha256_{std::move(sha256)} {} + + std::shared_ptr description_; + std::shared_ptr sha256_; +}; #endif // INCLUDED_SRC_BUILDTOOL_STORAGE_BACKEND_DESCRIPTION_HPP -- cgit v1.2.3