mirror of
https://github.com/NixOS/nix.git
synced 2025-12-13 12:31:04 +01:00
nlohmann::json instance and JSON Schema for MemorySourceAccessor
Also do a better JSON and testing for deep and shallow NAR listings. As documented, this for file system objects themselves, since `MemorySourceAccessor` is an implementation detail.
This commit is contained in:
parent
c4906741a1
commit
7357a654de
26 changed files with 605 additions and 101 deletions
|
|
@ -324,52 +324,4 @@ ShallowNarListing listNarShallow(SourceAccessor & accessor, const CanonPath & pa
|
|||
return listNarImpl<false>(accessor, path);
|
||||
}
|
||||
|
||||
template<typename Listing>
|
||||
static void to_json_impl(nlohmann::json & j, const Listing & listing)
|
||||
{
|
||||
std::visit(
|
||||
overloaded{
|
||||
[&](const typename Listing::Regular & r) {
|
||||
j = nlohmann::json::object();
|
||||
j["type"] = "regular";
|
||||
if (r.contents.fileSize)
|
||||
j["size"] = *r.contents.fileSize;
|
||||
if (r.executable)
|
||||
j["executable"] = true;
|
||||
if (r.contents.narOffset)
|
||||
j["narOffset"] = *r.contents.narOffset;
|
||||
},
|
||||
[&](const typename Listing::Directory & d) {
|
||||
j = nlohmann::json::object();
|
||||
j["type"] = "directory";
|
||||
j["entries"] = nlohmann::json::object();
|
||||
for (const auto & [name, child] : d.entries) {
|
||||
if constexpr (std::is_same_v<Listing, NarListing>) {
|
||||
to_json(j["entries"][name], child);
|
||||
} else if constexpr (std::is_same_v<Listing, ShallowNarListing>) {
|
||||
j["entries"][name] = nlohmann::json::object();
|
||||
} else {
|
||||
static_assert(false);
|
||||
}
|
||||
}
|
||||
},
|
||||
[&](const typename Listing::Symlink & s) {
|
||||
j = nlohmann::json::object();
|
||||
j["type"] = "symlink";
|
||||
j["target"] = s.target;
|
||||
},
|
||||
},
|
||||
listing.raw);
|
||||
}
|
||||
|
||||
void to_json(nlohmann::json & j, const NarListing & listing)
|
||||
{
|
||||
to_json_impl(j, listing);
|
||||
}
|
||||
|
||||
void to_json(nlohmann::json & j, const ShallowNarListing & listing)
|
||||
{
|
||||
to_json_impl(j, listing);
|
||||
}
|
||||
|
||||
} // namespace nix
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue