namespace BotPages.Core { /// /// Конвейер выполнения middleware и роутера. /// public sealed class Pipeline { private readonly IReadOnlyList _middlewares; private readonly IRouter _router; /// /// Создаёт конвейер обработки обновлений. /// public Pipeline(IEnumerable middlewares, IRouter router) { _middlewares = middlewares.ToList(); _router = router; } /// /// Запускает выполнение конвейера для заданного контекста. /// public Task ExecuteAsync(UpdateContext ctx, CancellationToken ct) { var index = 0; Task Next() => (index < _middlewares.Count) ? _middlewares[index++].InvokeAsync(ctx, Next, ct) : _router.RouteAsync(ctx, ct); return Next(); } } }