< Summary

Line coverage
83%
Covered lines: 20
Uncovered lines: 4
Coverable lines: 24
Total lines: 330
Line coverage: 83.3%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: .cctor()100%210%
File 2: Build(...)100%22100%

File(s)

/home/runner/work/anichron/anichron/src/.artifacts/obj/Anichron.Worker/debug/Microsoft.Extensions.Logging.Generators/Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator/LoggerMessage.g.cs

File '/home/runner/work/anichron/anichron/src/.artifacts/obj/Anichron.Worker/debug/Microsoft.Extensions.Logging.Generators/Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator/LoggerMessage.g.cs' does not exist (any more).

/home/runner/work/anichron/anichron/src/Anichron.Worker/Ingestion/Pipeline/IngestionPipelineBuilder.cs

#LineLine coverage
 1namespace Anichron.Worker.Ingestion.Pipeline;
 2
 3internal static partial class IngestionPipelineBuilder
 4{
 5    internal static IngestionDelegate Build(IReadOnlyList<IIngestionMiddleware> middlewares, ILogger logger)
 316    {
 317        IngestionDelegate pipeline = static (_, _) => Task.CompletedTask;
 8
 9        // Build right-to-left so the composed chain runs left-to-right:
 10        // wrapping middleware[n-1] first means middleware[0] is the outermost caller.
 18311        foreach (var middleware in middlewares.Reverse())
 4512        {
 13            // Capture 'pipeline' before reassignment — without this all lambdas would
 14            // close over the final value of the outer variable, not this iteration's.
 4515            var next = pipeline;
 4516            pipeline = async (context, ct) =>
 4517            {
 4518                if (!middleware.CanInvoke(context))
 4519                {
 4520                    Log.StepSkipped(logger, middleware.GetType().Name);
 4521                    await next(context, ct);
 4522                    return;
 4523                }
 4524
 4525                Log.StepStarted(logger, middleware.GetType().Name);
 4526                await middleware.InvokeAsync(context, next, ct);
 4527            };
 4528        }
 29
 3130        return pipeline;
 3131    }
 32
 33    private static partial class Log
 34    {
 35        [LoggerMessage(Level = LogLevel.Debug, Message = "-> {MiddlewareName}")]
 36        public static partial void StepStarted(ILogger logger, string middlewareName);
 37
 38        [LoggerMessage(Level = LogLevel.Trace, Message = "-- {MiddlewareName} (skipped)")]
 39        public static partial void StepSkipped(ILogger logger, string middlewareName);
 40    }
 41}