using System; using System.Threading.Tasks; using MailKit.Net.Imap; using Wino.Core.Domain.Interfaces; namespace Wino.Core.Requests.Bundles; public class ImapRequest { public Func IntegratorTask { get; } public IRequestBase Request { get; } public ImapRequest(Func integratorTask, IRequestBase request) { IntegratorTask = integratorTask; Request = request; } } public class ImapRequest : ImapRequest where TRequestBaseType : IRequestBase { public ImapRequest(Func integratorTask, TRequestBaseType request) : base((client, request) => integratorTask(client, (TRequestBaseType)request), request) { } } public record ImapRequestBundle(ImapRequest NativeRequest, IRequestBase Request, IUIChangeRequest UIChangeRequest) : IRequestBundle { public string BundleId { get; set; } = Guid.NewGuid().ToString(); }