diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-07-11 13:22:16 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-07-12 15:43:37 +0200 |
commit | 1e1758e8c30d30df0ebeefbada1e5a8f74d8a350 (patch) | |
tree | b5b87ab3d7b61a0dc0e89e14e28af78293c4a423 /src/buildtool/common/artifact_description.hpp | |
parent | 9362f6c426a6e10d0f77282364a0061ebf192375 (diff) | |
download | justbuild-1e1758e8c30d30df0ebeefbada1e5a8f74d8a350.tar.gz |
Use static Create functions to construct ArtifactDescription
...instead of unobvious ctors relying on overload resolution.
Diffstat (limited to 'src/buildtool/common/artifact_description.hpp')
-rw-r--r-- | src/buildtool/common/artifact_description.hpp | 28 |
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; |