using System.IO; namespace zero.Utils; public abstract class TableExport : ITableExport where TEntity : ZeroIdEntity { public virtual async Task Export(TableFormat format = TableFormat.Excel) { ITableBuilder builder = new TableBuilder(format); await Warmup(); Build(builder); IAsyncEnumerable items = Load(); MemoryStream stream = await builder.ToStream(items); return stream; } protected virtual Task Warmup() => Task.CompletedTask; protected virtual async IAsyncEnumerable Load() { await Task.Delay(0); yield break; } protected virtual void Build(ITableBuilder builder) { builder.Column("Id").For(c => c.Id).Size(40); } } public interface ITableExport where TEntity : ZeroIdEntity { Task Export(TableFormat format = TableFormat.Excel); }