< Summary

Information
Class: TeleFlow.Telegram.TelegramDeepLinks
Assembly: TeleFlow.Telegram.Client
File(s): /_/src/TeleFlow.Telegram.Client/TelegramDeepLinks.cs
Line coverage
76%
Covered lines: 19
Uncovered lines: 6
Coverable lines: 25
Total lines: 83
Line coverage: 76%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%2283.33%
.ctor(...)0%620%
Start(...)100%11100%
Start(...)100%11100%
StartGroup(...)100%11100%
StartGroup(...)100%210%
Serialize(...)100%11100%
Deserialize(...)100%11100%
Build(...)100%11100%
GetConfiguredBotUsername()100%22100%

File(s)

/_/src/TeleFlow.Telegram.Client/TelegramDeepLinks.cs

#LineLine coverage
 1using TeleFlow.Telegram.Internal;
 2
 3namespace TeleFlow.Telegram;
 4
 5public sealed class TelegramDeepLinks
 6{
 7    private readonly string? _botUsername;
 8    private readonly IDeepLinkPayloadSerializer _payloadSerializer;
 9
 10    public TelegramDeepLinks(
 11        string? botUsername,
 12        IDeepLinkPayloadSerializer payloadSerializer)
 13    {
 33814        ArgumentNullException.ThrowIfNull(payloadSerializer);
 15
 33816        if (!TelegramBotUsernameNormalizer.TryNormalize(botUsername, out var normalizedUsername, out var error))
 17        {
 018            throw new ArgumentException(error, nameof(botUsername));
 19        }
 20
 33821        _botUsername = normalizedUsername;
 33822        _payloadSerializer = payloadSerializer;
 33823    }
 24
 25    public TelegramDeepLinks(
 26        TelegramClientOptions options,
 27        IDeepLinkPayloadSerializer payloadSerializer)
 028        : this(
 029            (options ?? throw new ArgumentNullException(nameof(options))).BotUsername,
 030            payloadSerializer)
 31    {
 032    }
 33
 34    public Uri Start(string payload)
 35    {
 1236        return Build("start", payload);
 37    }
 38
 39    public Uri Start<TPayload>(TPayload payload)
 40    {
 241        return Start(Serialize(payload));
 42    }
 43
 44    public Uri StartGroup(string payload)
 45    {
 146        return Build("startgroup", payload);
 47    }
 48
 49    public Uri StartGroup<TPayload>(TPayload payload)
 50    {
 051        return StartGroup(Serialize(payload));
 52    }
 53
 54    public string Serialize<TPayload>(TPayload payload)
 55    {
 556        var serialized = _payloadSerializer.Serialize(payload);
 557        TelegramDeepLinkPayloadValidator.Validate(serialized);
 558        return serialized;
 59    }
 60
 61    public TPayload Deserialize<TPayload>(string payload)
 62    {
 463        TelegramDeepLinkPayloadValidator.Validate(payload);
 464        return _payloadSerializer.Deserialize<TPayload>(payload);
 65    }
 66
 67    private Uri Build(string parameterName, string payload)
 68    {
 1369        var username = GetConfiguredBotUsername();
 1270        return TelegramDeepLinkUriBuilder.Build(username, parameterName, payload);
 71    }
 72
 73    private string GetConfiguredBotUsername()
 74    {
 1375        if (_botUsername is null)
 76        {
 177            throw new InvalidOperationException(
 178                "Telegram bot username must be configured before building deep links. Set TelegramClientOptions.BotUsern
 79        }
 80
 1281        return _botUsername;
 82    }
 83}