< Summary

Information
Class: TeleFlow.Telegram.Internal.Handlers.TelegramHandlerCandidateSet
Assembly: TeleFlow.Framework
File(s): /_/src/TeleFlow.Framework/Internal/Handlers/TelegramHandlerCandidateSet.cs
Line coverage
100%
Covered lines: 19
Uncovered lines: 0
Coverable lines: 19
Total lines: 55
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_HasStatefulCandidates()100%11100%
GetStatefulCandidates(...)100%22100%
Create(...)100%44100%

File(s)

/_/src/TeleFlow.Framework/Internal/Handlers/TelegramHandlerCandidateSet.cs

#LineLine coverage
 1namespace TeleFlow.Telegram.Internal.Handlers;
 2
 3/// <summary>
 4/// Groups command, message, or chat-member handler candidates by state at handler-table construction time so
 5/// the selector can skip unrelated stateful handlers during incoming Telegram update dispatch.
 6/// </summary>
 7internal sealed class TelegramHandlerCandidateSet
 8{
 9    private readonly IReadOnlyDictionary<string, IReadOnlyList<TelegramHandlerCandidate>> _statefulByState;
 10
 11    private TelegramHandlerCandidateSet(
 12        IReadOnlyList<TelegramHandlerCandidate> stateless,
 13        IReadOnlyDictionary<string, IReadOnlyList<TelegramHandlerCandidate>> statefulByState)
 14    {
 15        Stateless = stateless;
 60616        _statefulByState = statefulByState;
 60617    }
 18
 19    public IReadOnlyList<TelegramHandlerCandidate> Stateless { get; }
 20
 57221    public bool HasStatefulCandidates => _statefulByState.Count > 0;
 22
 23    public IReadOnlyList<TelegramHandlerCandidate> GetStatefulCandidates(string currentState)
 24    {
 3925        return _statefulByState.TryGetValue(currentState, out var candidates)
 3926            ? candidates
 3927            : TelegramHandlerCandidateStateIndex.EmptyCandidates;
 28    }
 29
 30    public static TelegramHandlerCandidateSet Create(IReadOnlyList<TelegramHandlerDescriptor> handlers)
 31    {
 60632        ArgumentNullException.ThrowIfNull(handlers);
 33
 60634        var stateless = new List<TelegramHandlerCandidate>();
 60635        var stateful = new Dictionary<string, List<TelegramHandlerCandidate>>(StringComparer.Ordinal);
 36
 287837        for (var index = 0; index < handlers.Count; index++)
 38        {
 83339            var handler = handlers[index];
 83340            var candidate = TelegramHandlerCandidate.Create(handler);
 41
 83342            if (handler.States.Count == 0)
 43            {
 77244                stateless.Add(candidate);
 77245                continue;
 46            }
 47
 6148            TelegramHandlerCandidateStateIndex.Add(stateful, handler.States, candidate);
 49        }
 50
 60651        return new TelegramHandlerCandidateSet(
 60652            stateless.ToArray(),
 60653            TelegramHandlerCandidateStateIndex.Freeze(stateful));
 54    }
 55}