summaryrefslogtreecommitdiff
path: root/src/buildtool/storage/backend_description.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/storage/backend_description.hpp')
-rw-r--r--src/buildtool/storage/backend_description.hpp41
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