summaryrefslogtreecommitdiff
path: root/src/buildtool/common/artifact_description.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/common/artifact_description.hpp')
-rw-r--r--src/buildtool/common/artifact_description.hpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/buildtool/common/artifact_description.hpp b/src/buildtool/common/artifact_description.hpp
index dd312083..84845ed2 100644
--- a/src/buildtool/common/artifact_description.hpp
+++ b/src/buildtool/common/artifact_description.hpp
@@ -25,7 +25,7 @@
#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/file_system/object_type.hpp"
-class ArtifactDescription {
+class ArtifactDescription final {
using Local = std::pair<std::filesystem::path, std::string>;
using Known =
std::tuple<ArtifactDigest, ObjectType, std::optional<std::string>>;
@@ -33,18 +33,22 @@ class ArtifactDescription {
using Tree = std::string;
public:
- explicit ArtifactDescription(std::filesystem::path path,
- std::string repository) noexcept;
+ [[nodiscard]] static auto CreateLocal(std::filesystem::path path,
+ std::string repository) noexcept
+ -> ArtifactDescription;
- ArtifactDescription(
+ [[nodiscard]] static auto CreateAction(std::string action_id,
+ std::filesystem::path path) noexcept
+ -> ArtifactDescription;
+
+ [[nodiscard]] static auto CreateKnown(
ArtifactDigest digest,
ObjectType file_type,
- std::optional<std::string> repo = std::nullopt) noexcept;
-
- ArtifactDescription(std::string action_id,
- std::filesystem::path path) noexcept;
+ std::optional<std::string> repo = std::nullopt) noexcept
+ -> ArtifactDescription;
- explicit ArtifactDescription(std::string tree_id) noexcept;
+ [[nodiscard]] static auto CreateTree(std::string tree_id) noexcept
+ -> ArtifactDescription;
[[nodiscard]] auto Id() const& noexcept -> ArtifactIdentifier const& {
return id_;
@@ -82,7 +86,11 @@ class ArtifactDescription {
private:
std::variant<Local, Known, Action, Tree> data_;
- ArtifactIdentifier id_{ComputeId(ToJson())};
+ ArtifactIdentifier id_;
+
+ template <typename T>
+ explicit ArtifactDescription(T data) noexcept
+ : data_{std::move(data)}, id_{ComputeId(ToJson())} {}
[[nodiscard]] static auto ComputeId(nlohmann::json const& desc) noexcept
-> ArtifactIdentifier;