using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using BTCPayServer.Services.Invoices; namespace BTCPayServer.Payments { /// /// This class customize invoice creation by the creation of payment details for the PaymentMethod during invoice creation /// public interface IPaymentMethodHandler { /// /// Create needed to track payments of this invoice /// /// /// /// /// Task CreatePaymentMethodDetails(ISupportedPaymentMethod supportedPaymentMethod, PaymentMethod paymentMethod, BTCPayNetwork network); } public interface IPaymentMethodHandler : IPaymentMethodHandler where T : ISupportedPaymentMethod { Task CreatePaymentMethodDetails(T supportedPaymentMethod, PaymentMethod paymentMethod, BTCPayNetwork network); } public abstract class PaymentMethodHandlerBase : IPaymentMethodHandler where T : ISupportedPaymentMethod { public abstract Task CreatePaymentMethodDetails(T supportedPaymentMethod, PaymentMethod paymentMethod, BTCPayNetwork network); Task IPaymentMethodHandler.CreatePaymentMethodDetails(ISupportedPaymentMethod supportedPaymentMethod, PaymentMethod paymentMethod, BTCPayNetwork network) { if (supportedPaymentMethod is T method) { return CreatePaymentMethodDetails(method, paymentMethod, network); } throw new NotSupportedException("Invalid supportedPaymentMethod"); } } }