diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-04-19 14:13:30 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-04-19 14:13:30 -0400 |
commit | aba8a8a83a89d577769a39a69e9b90e3ed0d4f82 (patch) | |
tree | a0bbf8ca8067c000ca2d2acdd367ffefad1f78cd /src/libstore/content-address.cc | |
parent | 20decfd30261bd46d2bf78209cb2bdd144fcd0b4 (diff) |
Add a few more content addressing methods
Good to round out the library interface.
Diffstat (limited to 'src/libstore/content-address.cc')
-rw-r--r-- | src/libstore/content-address.cc | 68 |
1 files changed, 49 insertions, 19 deletions
diff --git a/src/libstore/content-address.cc b/src/libstore/content-address.cc index 2bde23e79..8a65059e3 100644 --- a/src/libstore/content-address.cc +++ b/src/libstore/content-address.cc @@ -154,38 +154,32 @@ std::string renderContentAddress(std::optional<ContentAddress> ca) return ca ? ca->render() : ""; } -ContentAddressWithReferences ContentAddressWithReferences::fromParts( - ContentAddressMethod method, Hash hash, StoreReferences refs) +ContentAddress ContentAddress::fromParts( + ContentAddressMethod method, Hash hash) { return std::visit(overloaded { - [&](TextIngestionMethod _) -> ContentAddressWithReferences { - if (refs.self) - throw UsageError("Cannot have a self reference with text hashing scheme"); - return TextInfo { - .hash = { .hash = std::move(hash) }, - .references = std::move(refs.others), + [&](TextIngestionMethod _) -> ContentAddress { + return TextHash { + .hash = std::move(hash), }; }, - [&](FileIngestionMethod m2) -> ContentAddressWithReferences { - return FixedOutputInfo { - .hash = { - .method = m2, - .hash = std::move(hash), - }, - .references = std::move(refs), + [&](FileIngestionMethod m2) -> ContentAddress { + return FixedOutputHash { + .method = std::move(m2), + .hash = std::move(hash), }; }, }, method.raw); } -ContentAddressMethod ContentAddressWithReferences::getMethod() const +ContentAddressMethod ContentAddress::getMethod() const { return std::visit(overloaded { - [](const TextInfo & th) -> ContentAddressMethod { + [](const TextHash & th) -> ContentAddressMethod { return TextIngestionMethod {}; }, - [](const FixedOutputInfo & fsh) -> ContentAddressMethod { - return fsh.hash.method; + [](const FixedOutputHash & fsh) -> ContentAddressMethod { + return fsh.method; }, }, raw); } @@ -229,6 +223,42 @@ ContentAddressWithReferences ContentAddressWithReferences::withoutRefs(const Con }, ca.raw); } +ContentAddressWithReferences ContentAddressWithReferences::fromParts( + ContentAddressMethod method, Hash hash, StoreReferences refs) +{ + return std::visit(overloaded { + [&](TextIngestionMethod _) -> ContentAddressWithReferences { + if (refs.self) + throw UsageError("Cannot have a self reference with text hashing scheme"); + return TextInfo { + .hash = { .hash = std::move(hash) }, + .references = std::move(refs.others), + }; + }, + [&](FileIngestionMethod m2) -> ContentAddressWithReferences { + return FixedOutputInfo { + .hash = { + .method = m2, + .hash = std::move(hash), + }, + .references = std::move(refs), + }; + }, + }, method.raw); +} + +ContentAddressMethod ContentAddressWithReferences::getMethod() const +{ + return std::visit(overloaded { + [](const TextInfo & th) -> ContentAddressMethod { + return TextIngestionMethod {}; + }, + [](const FixedOutputInfo & fsh) -> ContentAddressMethod { + return fsh.hash.method; + }, + }, raw); +} + Hash ContentAddressWithReferences::getHash() const { return std::visit(overloaded { |