private void WriteMetadata(ZipArchive archive, BlockMetadata metadata) { ZipArchiveEntry contentsEntry = archive.CreateEntry(METADATA_ENTRY_NAME); using var stream = contentsEntry.Open(); metadata.Serialize(stream); }
private BlockMetadata ReadMetadata(ZipArchive archive) { var entry = archive.GetEntry(METADATA_ENTRY_NAME); using var stream = entry.Open(); return(BlockMetadata.Deserialize(stream)); }
private IEnumerable <Document <T> > ReadDocuments(ZipArchive archive, BlockMetadata metadata) { foreach (var entry in archive.Entries) { if (entry.Name != METADATA_ENTRY_NAME) { using var stream = entry.Open(); var data = dataSerializer.Deserialize(stream); var filename = Path.GetFileNameWithoutExtension(entry.Name.AsSpan()); var id = DocumentId.Parse(filename); yield return(new Document <T>(metadata[id], data)); } } }
protected IEnumerable <string> GetBlocksPaths() { return(FileSystem.Directory.GetFiles(path, "*.zip") .OrderBy(fn => BlockMetadata.ParseId(Path.GetFileNameWithoutExtension(fn.AsSpan())))); }
protected string GetBlockPath(ushort blockId) { return(Path.Combine(path, $"{BlockMetadata.IdString(blockId)}.zip")); }
/// <summary> /// Make new block from a list of documents /// </summary> /// <param name="id">The block's id</param> /// <param name="docs">The list of documents</param> /// <returns>The new block</returns> public static Block <T> Make(ushort id, IList <Document <T> > docs) { return(new Block <T>(docs, BlockMetadata.Make <T>(id, docs))); }
public Block(IList <Document <T> > docs, BlockMetadata metadata) { Documents = docs; Metadata = metadata; }