< Summary

Information
Class: TeleFlow.Telegram.TelegramGeneratedHandlerDescriptor
Assembly: TeleFlow.Framework
File(s): /_/src/TeleFlow.Framework/Generated/TelegramGeneratedHandlerDescriptor.cs
Line coverage
79%
Covered lines: 91
Uncovered lines: 24
Coverable lines: 115
Total lines: 300
Line coverage: 79.1%
Branch coverage
66%
Covered branches: 8
Total branches: 12
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%210%
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)33.33%3395%
GetLegacyRouteKind(...)60%5575%
CopyValues(...)100%44100%

File(s)

/_/src/TeleFlow.Framework/Generated/TelegramGeneratedHandlerDescriptor.cs

#LineLine coverage
 1using System.ComponentModel;
 2using TeleFlow.Annotations;
 3
 4namespace TeleFlow.Telegram;
 5
 6/// <summary>
 7/// Infrastructure handler metadata emitted by TeleFlow source generators.
 8/// This API is not intended to be used by application code.
 9/// </summary>
 10[EditorBrowsable(EditorBrowsableState.Never)]
 11public sealed class TelegramGeneratedHandlerDescriptor
 12{
 13    public TelegramGeneratedHandlerDescriptor(
 14        Type handlerType,
 15        string methodName,
 16        TelegramGeneratedHandlerKind kind,
 17        int registrationOrder,
 18        string? moduleName,
 19        string? command,
 20        Type? callbackPayloadType,
 21        IReadOnlyList<TelegramGeneratedTextFilterDescriptor> textFilters,
 22        IReadOnlyList<string> states,
 23        IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> parameters,
 24        TelegramGeneratedHandlerInvoker invoker)
 35225        : this(
 35226            handlerType,
 35227            methodName,
 35228            kind,
 35229            GetLegacyRouteKind(kind),
 35230            routePattern: command,
 35231            commandPrefixes: ["/"],
 35232            allowSpaceAfterPrefix: false,
 35233            ignoreCase: true,
 35234            registrationOrder,
 35235            moduleName,
 35236            command,
 35237            callbackPayloadType,
 35238            textFilters,
 35239            filters: [],
 35240            chatMemberTransitions: [],
 35241            roleRequirements: [],
 35242            states,
 35243            parameters,
 35244            invoker)
 45    {
 35246    }
 47
 48    public TelegramGeneratedHandlerDescriptor(
 49        Type handlerType,
 50        string methodName,
 51        TelegramGeneratedHandlerKind kind,
 52        TelegramGeneratedRouteKind routeKind,
 53        string? routePattern,
 54        IReadOnlyList<string>? commandPrefixes,
 55        bool allowSpaceAfterPrefix,
 56        bool ignoreCase,
 57        int registrationOrder,
 58        string? moduleName,
 59        string? command,
 60        Type? callbackPayloadType,
 61        IReadOnlyList<TelegramGeneratedTextFilterDescriptor> textFilters,
 62        IReadOnlyList<string> states,
 63        IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> parameters,
 64        TelegramGeneratedHandlerInvoker invoker)
 065        : this(
 066            handlerType,
 067            methodName,
 068            kind,
 069            routeKind,
 070            routePattern,
 071            commandPrefixes,
 072            allowSpaceAfterPrefix,
 073            ignoreCase,
 074            registrationOrder,
 075            moduleName,
 076            command,
 077            callbackPayloadType,
 078            textFilters,
 079            filters: [],
 080            chatMemberTransitions: [],
 081            roleRequirements: [],
 082            states,
 083            parameters,
 084            invoker)
 85    {
 086    }
 87
 88    public TelegramGeneratedHandlerDescriptor(
 89        Type handlerType,
 90        string methodName,
 91        TelegramGeneratedHandlerKind kind,
 92        TelegramGeneratedRouteKind routeKind,
 93        string? routePattern,
 94        IReadOnlyList<string>? commandPrefixes,
 95        bool allowSpaceAfterPrefix,
 96        bool ignoreCase,
 97        int registrationOrder,
 98        string? moduleName,
 99        string? command,
 100        Type? callbackPayloadType,
 101        IReadOnlyList<TelegramGeneratedTextFilterDescriptor> textFilters,
 102        IReadOnlyList<TelegramGeneratedFilterDescriptor> filters,
 103        IReadOnlyList<string> states,
 104        IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> parameters,
 105        TelegramGeneratedHandlerInvoker invoker)
 224106        : this(
 224107            handlerType,
 224108            methodName,
 224109            kind,
 224110            routeKind,
 224111            routePattern,
 224112            commandPrefixes,
 224113            allowSpaceAfterPrefix,
 224114            ignoreCase,
 224115            registrationOrder,
 224116            moduleName,
 224117            command,
 224118            callbackPayloadType,
 224119            textFilters,
 224120            filters,
 224121            chatMemberTransitions: [],
 224122            roleRequirements: [],
 224123            states,
 224124            parameters,
 224125            invoker)
 126    {
 224127    }
 128
 129    public TelegramGeneratedHandlerDescriptor(
 130        Type handlerType,
 131        string methodName,
 132        TelegramGeneratedHandlerKind kind,
 133        TelegramGeneratedRouteKind routeKind,
 134        string? routePattern,
 135        IReadOnlyList<string>? commandPrefixes,
 136        bool allowSpaceAfterPrefix,
 137        bool ignoreCase,
 138        int registrationOrder,
 139        string? moduleName,
 140        string? command,
 141        Type? callbackPayloadType,
 142        IReadOnlyList<TelegramGeneratedTextFilterDescriptor> textFilters,
 143        IReadOnlyList<TelegramGeneratedFilterDescriptor> filters,
 144        IReadOnlyList<TelegramGeneratedChatMemberTransitionDescriptor> chatMemberTransitions,
 145        IReadOnlyList<string> states,
 146        IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> parameters,
 147        TelegramGeneratedHandlerInvoker invoker)
 32148        : this(
 32149            handlerType,
 32150            methodName,
 32151            kind,
 32152            routeKind,
 32153            routePattern,
 32154            commandPrefixes,
 32155            allowSpaceAfterPrefix,
 32156            ignoreCase,
 32157            registrationOrder,
 32158            moduleName,
 32159            command,
 32160            callbackPayloadType,
 32161            textFilters,
 32162            filters,
 32163            chatMemberTransitions,
 32164            roleRequirements: [],
 32165            states,
 32166            parameters,
 32167            invoker)
 168    {
 32169    }
 170
 171    public TelegramGeneratedHandlerDescriptor(
 172        Type handlerType,
 173        string methodName,
 174        TelegramGeneratedHandlerKind kind,
 175        TelegramGeneratedRouteKind routeKind,
 176        string? routePattern,
 177        IReadOnlyList<string>? commandPrefixes,
 178        bool allowSpaceAfterPrefix,
 179        bool ignoreCase,
 180        int registrationOrder,
 181        string? moduleName,
 182        string? command,
 183        Type? callbackPayloadType,
 184        IReadOnlyList<TelegramGeneratedTextFilterDescriptor> textFilters,
 185        IReadOnlyList<TelegramGeneratedFilterDescriptor> filters,
 186        IReadOnlyList<TelegramGeneratedChatMemberTransitionDescriptor> chatMemberTransitions,
 187        IReadOnlyList<TelegramGeneratedRoleRequirementDescriptor> roleRequirements,
 188        IReadOnlyList<string> states,
 189        IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> parameters,
 190        TelegramGeneratedHandlerInvoker invoker,
 191        string? sceneName = null,
 192        IReadOnlyList<TelegramGeneratedRouteValueDescriptor>? routeValues = null,
 193        TelegramGeneratedAutoAnswerCallbackDescriptor? autoAnswerCallback = null,
 194        CommandPrefixMode prefixMode = CommandPrefixMode.Required)
 195    {
 1063196        ArgumentNullException.ThrowIfNull(handlerType);
 1063197        ArgumentException.ThrowIfNullOrWhiteSpace(methodName);
 1063198        ArgumentNullException.ThrowIfNull(textFilters);
 1063199        ArgumentNullException.ThrowIfNull(filters);
 1063200        ArgumentNullException.ThrowIfNull(chatMemberTransitions);
 1063201        ArgumentNullException.ThrowIfNull(roleRequirements);
 1063202        ArgumentNullException.ThrowIfNull(states);
 1063203        ArgumentNullException.ThrowIfNull(parameters);
 1063204        ArgumentNullException.ThrowIfNull(invoker);
 205
 1063206        if (!Enum.IsDefined(prefixMode))
 207        {
 0208            throw new ArgumentOutOfRangeException(nameof(prefixMode), prefixMode, "Unsupported command prefix mode.");
 209        }
 210
 211        HandlerType = handlerType;
 212        MethodName = methodName;
 213        Kind = kind;
 214        RouteKind = routeKind;
 215        RoutePattern = routePattern;
 1063216        CommandPrefixes = CopyValues(commandPrefixes ?? ["/"]);
 217        AllowSpaceAfterPrefix = allowSpaceAfterPrefix;
 218        PrefixMode = prefixMode;
 219        IgnoreCase = ignoreCase;
 220        RegistrationOrder = registrationOrder;
 221        ModuleName = moduleName;
 222        Command = command;
 223        CallbackPayloadType = callbackPayloadType;
 1063224        TextFilters = CopyValues(textFilters);
 1063225        Filters = CopyValues(filters);
 1063226        ChatMemberTransitions = CopyValues(chatMemberTransitions);
 1063227        RoleRequirements = CopyValues(roleRequirements);
 1063228        States = CopyValues(states);
 1063229        Parameters = CopyValues(parameters);
 230        Invoker = invoker;
 231        SceneName = sceneName;
 1063232        RouteValues = CopyValues(routeValues);
 233        AutoAnswerCallback = autoAnswerCallback;
 1063234    }
 235
 236    private static TelegramGeneratedRouteKind GetLegacyRouteKind(TelegramGeneratedHandlerKind kind)
 237    {
 352238        return kind switch
 352239        {
 224240            TelegramGeneratedHandlerKind.Command => TelegramGeneratedRouteKind.CommandExact,
 96241            TelegramGeneratedHandlerKind.Message => TelegramGeneratedRouteKind.MessageAny,
 32242            TelegramGeneratedHandlerKind.Callback => TelegramGeneratedRouteKind.Callback,
 0243            TelegramGeneratedHandlerKind.ChatMember => TelegramGeneratedRouteKind.ChatMemberUpdated,
 0244            _ => throw new InvalidOperationException($"Unsupported generated Telegram handler kind '{kind}'.")
 352245        };
 246    }
 247
 248    public Type HandlerType { get; }
 249
 250    public string MethodName { get; }
 251
 252    public TelegramGeneratedHandlerKind Kind { get; }
 253
 254    public TelegramGeneratedRouteKind RouteKind { get; }
 255
 256    public string? RoutePattern { get; }
 257
 258    public IReadOnlyList<string> CommandPrefixes { get; }
 259
 260    public bool AllowSpaceAfterPrefix { get; }
 261
 262    public CommandPrefixMode PrefixMode { get; }
 263
 264    public bool IgnoreCase { get; }
 265
 266    public int RegistrationOrder { get; }
 267
 268    public string? ModuleName { get; }
 269
 270    public string? SceneName { get; }
 271
 272    public string? Command { get; }
 273
 274    public Type? CallbackPayloadType { get; }
 275
 276    public IReadOnlyList<TelegramGeneratedTextFilterDescriptor> TextFilters { get; }
 277
 278    public IReadOnlyList<TelegramGeneratedFilterDescriptor> Filters { get; }
 279
 280    public IReadOnlyList<TelegramGeneratedChatMemberTransitionDescriptor> ChatMemberTransitions { get; }
 281
 282    public IReadOnlyList<TelegramGeneratedRoleRequirementDescriptor> RoleRequirements { get; }
 283
 284    public IReadOnlyList<string> States { get; }
 285
 286    public IReadOnlyList<TelegramGeneratedHandlerParameterDescriptor> Parameters { get; }
 287
 288    public TelegramGeneratedHandlerInvoker Invoker { get; }
 289
 290    public IReadOnlyList<TelegramGeneratedRouteValueDescriptor> RouteValues { get; }
 291
 292    public TelegramGeneratedAutoAnswerCallbackDescriptor? AutoAnswerCallback { get; }
 293
 294    private static TValue[] CopyValues<TValue>(IReadOnlyList<TValue>? values)
 295    {
 8504296        return values is null || values.Count == 0
 8504297            ? []
 8504298            : values.ToArray();
 299    }
 300}

Methods/Properties

.ctor(System.Type,System.String,TeleFlow.Telegram.TelegramGeneratedHandlerKind,System.Int32,System.String,System.String,System.Type,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedTextFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedHandlerParameterDescriptor>,TeleFlow.Telegram.TelegramGeneratedHandlerInvoker)
.ctor(System.Type,System.String,TeleFlow.Telegram.TelegramGeneratedHandlerKind,TeleFlow.Telegram.TelegramGeneratedRouteKind,System.String,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Boolean,System.Boolean,System.Int32,System.String,System.String,System.Type,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedTextFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedHandlerParameterDescriptor>,TeleFlow.Telegram.TelegramGeneratedHandlerInvoker)
.ctor(System.Type,System.String,TeleFlow.Telegram.TelegramGeneratedHandlerKind,TeleFlow.Telegram.TelegramGeneratedRouteKind,System.String,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Boolean,System.Boolean,System.Int32,System.String,System.String,System.Type,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedTextFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedHandlerParameterDescriptor>,TeleFlow.Telegram.TelegramGeneratedHandlerInvoker)
.ctor(System.Type,System.String,TeleFlow.Telegram.TelegramGeneratedHandlerKind,TeleFlow.Telegram.TelegramGeneratedRouteKind,System.String,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Boolean,System.Boolean,System.Int32,System.String,System.String,System.Type,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedTextFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedChatMemberTransitionDescriptor>,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedHandlerParameterDescriptor>,TeleFlow.Telegram.TelegramGeneratedHandlerInvoker)
.ctor(System.Type,System.String,TeleFlow.Telegram.TelegramGeneratedHandlerKind,TeleFlow.Telegram.TelegramGeneratedRouteKind,System.String,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Boolean,System.Boolean,System.Int32,System.String,System.String,System.Type,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedTextFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedFilterDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedChatMemberTransitionDescriptor>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedRoleRequirementDescriptor>,System.Collections.Generic.IReadOnlyList`1<System.String>,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedHandlerParameterDescriptor>,TeleFlow.Telegram.TelegramGeneratedHandlerInvoker,System.String,System.Collections.Generic.IReadOnlyList`1<TeleFlow.Telegram.TelegramGeneratedRouteValueDescriptor>,TeleFlow.Telegram.TelegramGeneratedAutoAnswerCallbackDescriptor,TeleFlow.Annotations.CommandPrefixMode)
GetLegacyRouteKind(TeleFlow.Telegram.TelegramGeneratedHandlerKind)
CopyValues(System.Collections.Generic.IReadOnlyList`1<TValue>)