< Summary

Information
Class: TeleFlow.Telegram.Base64UrlJsonDeepLinkPayloadSerializer
Assembly: TeleFlow.Telegram.Client
File(s): /_/src/TeleFlow.Telegram.Client/Base64UrlJsonDeepLinkPayloadSerializer.cs
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 49
Line coverage: 100%
Branch coverage
75%
Covered branches: 3
Total branches: 4
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
Serialize(...)100%11100%
Deserialize(...)75%44100%

File(s)

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

#LineLine coverage
 1using System.Text;
 2using System.Text.Json;
 3
 4namespace TeleFlow.Telegram;
 5
 6public sealed class Base64UrlJsonDeepLinkPayloadSerializer : IDeepLinkPayloadSerializer
 7{
 18    private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web);
 9
 10    public string Serialize<TPayload>(TPayload payload)
 11    {
 312        ArgumentNullException.ThrowIfNull(payload);
 13
 314        var json = JsonSerializer.Serialize(payload, JsonOptions);
 315        var bytes = Encoding.UTF8.GetBytes(json);
 316        return Convert.ToBase64String(bytes)
 317            .TrimEnd('=')
 318            .Replace('+', '-')
 319            .Replace('/', '_');
 20    }
 21
 22    public TPayload Deserialize<TPayload>(string payload)
 23    {
 324        ArgumentException.ThrowIfNullOrWhiteSpace(payload);
 25
 26        try
 27        {
 328            var base64 = payload
 329                .Replace('-', '+')
 330                .Replace('_', '/');
 331            var padding = base64.Length % 4;
 332            if (padding != 0)
 33            {
 334                base64 = base64.PadRight(base64.Length + 4 - padding, '=');
 35            }
 36
 337            var bytes = Convert.FromBase64String(base64);
 338            return JsonSerializer.Deserialize<TPayload>(bytes, JsonOptions)
 339                ?? throw new ArgumentException("Deep-link payload JSON deserialized to null.", nameof(payload));
 40        }
 141        catch (Exception exception) when (exception is FormatException or JsonException)
 42        {
 143            throw new ArgumentException(
 144                "Deep-link payload is not a valid Base64Url JSON payload.",
 145                nameof(payload),
 146                exception);
 47        }
 248    }
 49}