| 202 | } |
| 203 | |
| 204 | Result<Parser<Byte>> parseManifest(const ValdiArchiveEntry& entry, uint64_t* idSequence) { |
| 205 | if (entry.filePath != manifestEntryName()) { |
| 206 | return Error("First entry in store should be the manifest"); |
| 207 | } |
| 208 | |
| 209 | auto manifestParser = Parser(entry.data, entry.data + entry.dataLength); |
| 210 | auto manifestHeaderResult = manifestParser.parseStruct<KeyValueStoreManifest>(); |
| 211 | if (!manifestHeaderResult) { |
| 212 | return manifestHeaderResult.moveError(); |
| 213 | } |
| 214 | |
| 215 | if (manifestHeaderResult.value()->version != kKeyValueStoreVersion) { |
| 216 | return Error("Incompatible KeyValueStore version"); |
| 217 | } |
| 218 | |
| 219 | *idSequence = manifestHeaderResult.value()->mutationIdSequence; |
| 220 | |
| 221 | return manifestParser; |
| 222 | } |
| 223 | |
| 224 | Result<KeyValueStoreEntry> parseEntry(Parser<Byte>& manifestParser, |
| 225 | const ValdiArchiveEntry& entry, |