#include "file-hash.hh" namespace nix { std::string FileSystemHash::printMethodAlgo() const { return makeFileIngestionPrefix(method) + printHashType(hash.type); } std::string makeFileIngestionPrefix(const FileIngestionMethod m) { switch (m) { case FileIngestionMethod::Flat: return ""; case FileIngestionMethod::Recursive: return "r:"; default: throw Error("impossible, caught both cases"); } } std::string makeFixedOutputCA(FileIngestionMethod method, const Hash & hash) { return "fixed:" + makeFileIngestionPrefix(method) + hash.to_string(); } template struct overloaded : Ts... { using Ts::operator()...; }; template overloaded(Ts...) -> overloaded; std::string renderContentAddress(ContentAddress ca) { return std::visit(overloaded { [](TextHash th) { return "text:" + th.hash.to_string(); }, [](FileSystemHash fsh) { return makeFixedOutputCA(fsh.method, fsh.hash); } }, ca); } ContentAddress parseCa(std::string_view rawCa) { throw Error("TODO"); }; std::optional parseCaOpt(std::string_view rawCaOpt) { return rawCaOpt == "" ? std::optional {} : parseCa(rawCaOpt); }; std::string renderContentAddress(std::optional ca) { return ca ? renderContentAddress(*ca) : ""; } }