| 61 | } |
| 62 | |
| 63 | Result<std::vector<ValdiArchiveEntry>> ValdiArchive::getEntries() const { |
| 64 | auto dataSection = ValdiPacket::read(_dataBegin, _dataEnd - _dataBegin); |
| 65 | if (!dataSection) { |
| 66 | return onModuleFailure(dataSection.moveError()); |
| 67 | } |
| 68 | |
| 69 | std::vector<ValdiArchiveEntry> entries; |
| 70 | auto parser = Parser(dataSection.value().begin(), dataSection.value().end()); |
| 71 | while (!parser.isAtEnd()) { |
| 72 | auto& entry = entries.emplace_back(StringBox(), nullptr, 0); |
| 73 | auto filenameLength = parser.parseValue<LengthField>(); |
| 74 | if (!filenameLength) { |
| 75 | return onModuleFailure(filenameLength.moveError()); |
| 76 | } |
| 77 | |
| 78 | auto filename = parseField(parser, filenameLength.value()); |
| 79 | if (!filename) { |
| 80 | return onModuleFailure(filename.moveError()); |
| 81 | } |
| 82 | |
| 83 | auto dataLength = parser.parseValue<LengthField>(); |
| 84 | if (!dataLength) { |
| 85 | return onModuleFailure(dataLength.moveError()); |
| 86 | } |
| 87 | |
| 88 | auto data = parseField(parser, dataLength.value()); |
| 89 | if (!data) { |
| 90 | return onModuleFailure(data.moveError()); |
| 91 | } |
| 92 | |
| 93 | auto path = StringCache::getGlobal().makeString(reinterpret_cast<const char*>(filename.value().data()), |
| 94 | filename.value().size()); |
| 95 | |
| 96 | entry.data = data.value().data(); |
| 97 | entry.dataLength = dataLength.value().size(); |
| 98 | entry.filePath = std::move(path); |
| 99 | } |
| 100 | |
| 101 | return entries; |
| 102 | } |
| 103 | |
| 104 | ValdiArchiveEntry::ValdiArchiveEntry(StringBox filePath, const Byte* data, size_t dataLength) |
| 105 | : filePath(std::move(filePath)), data(data), dataLength(dataLength) {} |
nothing calls this directly
no test coverage detected