diff options
Diffstat (limited to 'src/buildtool/storage/backend_description.hpp')
-rw-r--r-- | src/buildtool/storage/backend_description.hpp | 41 |
1 files changed, 35 insertions, 6 deletions
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 <memory> #include <optional> #include <string> +#include <utility> #include <vector> +#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<ServerAddress> const& address, - ExecutionProperties const& properties, - std::vector<DispatchEndpoint> const& dispatch) noexcept - -> expected<std::string, std::string>; +class BackendDescription final { + public: + explicit BackendDescription() noexcept; + + /// \brief String representation of the used execution backend. + [[nodiscard]] static auto Describe( + std::optional<ServerAddress> const& address, + ExecutionProperties const& properties, + std::vector<DispatchEndpoint> const& dispatch) noexcept + -> expected<BackendDescription, std::string>; + + [[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<std::string> description, + std::shared_ptr<std::string> sha256) noexcept + : description_{std::move(description)}, sha256_{std::move(sha256)} {} + + std::shared_ptr<std::string> description_; + std::shared_ptr<std::string> sha256_; +}; #endif // INCLUDED_SRC_BUILDTOOL_STORAGE_BACKEND_DESCRIPTION_HPP |