From 1e1758e8c30d30df0ebeefbada1e5a8f74d8a350 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Thu, 11 Jul 2024 13:22:16 +0200 Subject: Use static Create functions to construct ArtifactDescription ...instead of unobvious ctors relying on overload resolution. --- src/buildtool/common/artifact_description.hpp | 28 +++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/buildtool/common/artifact_description.hpp') 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; using Known = std::tuple>; @@ -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 repo = std::nullopt) noexcept; - - ArtifactDescription(std::string action_id, - std::filesystem::path path) noexcept; + std::optional 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 data_; - ArtifactIdentifier id_{ComputeId(ToJson())}; + ArtifactIdentifier id_; + + template + explicit ArtifactDescription(T data) noexcept + : data_{std::move(data)}, id_{ComputeId(ToJson())} {} [[nodiscard]] static auto ComputeId(nlohmann::json const& desc) noexcept -> ArtifactIdentifier; -- cgit v1.2.3