summaryrefslogtreecommitdiff
path: root/src/buildtool/common/artifact.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/common/artifact.cpp')
-rw-r--r--src/buildtool/common/artifact.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/buildtool/common/artifact.cpp b/src/buildtool/common/artifact.cpp
new file mode 100644
index 00000000..fc3c5b6e
--- /dev/null
+++ b/src/buildtool/common/artifact.cpp
@@ -0,0 +1,24 @@
+#include "src/buildtool/common/artifact.hpp"
+
+#include <string>
+
+auto Artifact::ObjectInfo::LiberalFromString(std::string const& s) noexcept
+ -> Artifact::ObjectInfo {
+ std::istringstream iss(s);
+ std::string id{};
+ std::string size_str{"0"};
+ std::string type{"f"};
+ if (iss.peek() == '[') {
+ (void)iss.get();
+ }
+ std::getline(iss, id, ':');
+ if (not iss.eof()) {
+ std::getline(iss, size_str, ':');
+ }
+ if (not iss.eof()) {
+ std::getline(iss, type, ']');
+ }
+ auto size = static_cast<std::size_t>(std::atol(size_str.c_str()));
+ return Artifact::ObjectInfo{ArtifactDigest{id, size},
+ FromChar(*type.c_str())};
+}