using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
namespace Bit.SeederApi.IntegrationTest;
public static class HttpClientExtensions
{
///
/// Sends a POST request with JSON content and attaches the x-play-id header.
///
/// The type of the value to serialize.
/// The HTTP client.
/// The URI the request is sent to.
/// The value to serialize.
/// The play ID to attach as x-play-id header.
/// Options to control the behavior during serialization.
/// A cancellation token that can be used to cancel the operation.
/// The task object representing the asynchronous operation.
public static Task PostAsJsonAsync(
this HttpClient client,
[StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri,
TValue value,
string playId,
JsonSerializerOptions? options = null,
CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(client);
if (string.IsNullOrWhiteSpace(playId))
{
throw new ArgumentException("Play ID cannot be null or whitespace.", nameof(playId));
}
var content = JsonContent.Create(value, mediaType: null, options);
content.Headers.Remove("x-play-id");
content.Headers.Add("x-play-id", playId);
return client.PostAsync(requestUri, content, cancellationToken);
}
}