aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/hash.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2020-07-02 23:10:11 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-07-02 23:10:11 +0000
commita7cd7425d9341cf8a2c3af80b84cc55e874515c6 (patch)
treec5547bf656f8d351cd647d0a8fb3507b6a178dd4 /src/libutil/hash.cc
parent2f93d9f2ba40760d82c189480f7a7de06e7ccb86 (diff)
Move `getParsedTypeAndSRI` to a more suitable location
Also mark it static
Diffstat (limited to 'src/libutil/hash.cc')
-rw-r--r--src/libutil/hash.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc
index 1150e74ed..76fa67086 100644
--- a/src/libutil/hash.cc
+++ b/src/libutil/hash.cc
@@ -144,6 +144,27 @@ Hash Hash::parseSRI(std::string_view original) {
return Hash(rest, parsedType, true);
}
+// Mutates the string to eliminate the prefixes when found
+static std::pair<std::optional<HashType>, bool> getParsedTypeAndSRI(std::string_view & rest) {
+ bool isSRI = false;
+
+ // Parse the has type before the separater, if there was one.
+ std::optional<HashType> optParsedType;
+ {
+ auto hashRaw = splitPrefix(rest, ':');
+
+ if (!hashRaw) {
+ hashRaw = splitPrefix(rest, '-');
+ if (hashRaw)
+ isSRI = true;
+ }
+ if (hashRaw)
+ optParsedType = parseHashType(*hashRaw);
+ }
+
+ return {optParsedType, isSRI};
+}
+
Hash Hash::parseAnyPrefixed(std::string_view original)
{
auto rest = original;