< Summary

Information
Class: TeleFlow.Telegram.Internal.TelegramRequestContentBuilder
Assembly: TeleFlow.Telegram.Client
File(s): /_/src/TeleFlow.Telegram.Client/Internal/TelegramRequestContentBuilder.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 37
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
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%
Build(...)100%44100%

File(s)

/_/src/TeleFlow.Telegram.Client/Internal/TelegramRequestContentBuilder.cs

#LineLine coverage
 1using System.Text.Json;
 2
 3namespace TeleFlow.Telegram.Internal;
 4
 5/// <summary>
 6/// Builds the transport-level request body for Telegram API method payloads.
 7/// It keeps the normal JSON path cheap and delegates multipart-specific work only when upload data is present.
 8/// This is reached by the Telegram request executor for every outgoing Bot API call, including ctx.Bot.*Async helpers.
 9/// </summary>
 10internal sealed class TelegramRequestContentBuilder
 11{
 12    private readonly JsonSerializerOptions _serializerOptions;
 13
 14    public TelegramRequestContentBuilder(JsonSerializerOptions serializerOptions)
 15    {
 30216        ArgumentNullException.ThrowIfNull(serializerOptions);
 30217        _serializerOptions = serializerOptions;
 30218    }
 19
 20    public TelegramTransportContent Build(object payload)
 21    {
 9222        ArgumentNullException.ThrowIfNull(payload);
 9223        var payloadType = payload.GetType();
 24
 25        // Telegram requests are JSON unless a concrete value contains an InputFile stream.
 26        // The type check is the cheap hot-path proof; the value scan only runs for upload-capable shapes.
 9227        if (!TelegramRequestUploadDetector.MayContainInputFile(payloadType) ||
 9228            !TelegramRequestUploadDetector.ContainsInputFile(payload))
 29        {
 8330            var json = JsonSerializer.Serialize(payload, payloadType, _serializerOptions);
 8331            return new TelegramJsonTransportContent(json);
 32        }
 33
 934        var builder = new TelegramMultipartContentBuilder(_serializerOptions);
 935        return builder.Build(payload);
 36    }
 37}