Files
Wino-Mail/Wino.Core/Requests/Bundles/RequestBundle.cs

33 lines
1.5 KiB
C#
Raw Normal View History

2024-04-18 01:44:37 +02:00
using System;
2025-05-18 14:06:25 +02:00
using System.Diagnostics.CodeAnalysis;
2024-04-18 01:44:37 +02:00
using System.Net.Http;
using System.Text.Json;
2024-04-18 01:44:37 +02:00
using System.Threading;
using System.Threading.Tasks;
using Wino.Core.Domain.Interfaces;
2025-02-16 11:54:23 +01:00
namespace Wino.Core.Requests.Bundles;
public record HttpRequestBundle<TRequest>(TRequest NativeRequest, IUIChangeRequest UIChangeRequest, IRequestBase Request = null) : IRequestBundle<TRequest>
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
public string BundleId { get; set; } = string.Empty;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
/// <summary>
/// Bundle that encapsulates batch request and native request with response.
/// </summary>
/// <typeparam name="TRequest">Http type for each integrator. eg. ClientServiceRequest for Gmail and RequestInformation for Microsoft Graph.</typeparam>
/// <param name="NativeRequest">Native type to send via http.</param>
/// <param name="BatchRequest">Batch request that is generated by base synchronizer.</param>
public record HttpRequestBundle<TRequest, TResponse>(TRequest NativeRequest, IRequestBase Request) : HttpRequestBundle<TRequest>(NativeRequest, Request)
{
2025-05-18 14:06:25 +02:00
[RequiresDynamicCode("AOT")]
[RequiresUnreferencedCode("AOT")]
2025-02-16 11:54:23 +01:00
public async Task<TResponse> DeserializeBundleAsync(HttpResponseMessage httpResponse, CancellationToken cancellationToken = default)
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
var content = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
return JsonSerializer.Deserialize<TResponse>(content) ?? throw new InvalidOperationException("Invalid Http Response Deserialization");
2024-04-18 01:44:37 +02:00
}
}