2024-04-04 16:31:04 +09:00
|
|
|
#nullable enable
|
|
|
|
using System;
|
2019-05-29 14:33:31 +00:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
2024-04-04 16:31:04 +09:00
|
|
|
using System.Diagnostics.CodeAnalysis;
|
2019-05-29 14:33:31 +00:00
|
|
|
using BTCPayServer.Payments;
|
2024-04-04 16:31:04 +09:00
|
|
|
using BTCPayServer.Payments.Bitcoin;
|
|
|
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
|
|
|
using Newtonsoft.Json.Linq;
|
2019-05-29 14:33:31 +00:00
|
|
|
|
|
|
|
namespace BTCPayServer.Services.Invoices
|
|
|
|
{
|
|
|
|
public class PaymentMethodHandlerDictionary : IEnumerable<IPaymentMethodHandler>
|
|
|
|
{
|
|
|
|
private readonly Dictionary<PaymentMethodId, IPaymentMethodHandler> _mappedHandlers =
|
|
|
|
new Dictionary<PaymentMethodId, IPaymentMethodHandler>();
|
|
|
|
|
|
|
|
public PaymentMethodHandlerDictionary(IEnumerable<IPaymentMethodHandler> paymentMethodHandlers)
|
|
|
|
{
|
|
|
|
foreach (var paymentMethodHandler in paymentMethodHandlers)
|
|
|
|
{
|
2024-04-04 16:31:04 +09:00
|
|
|
_mappedHandlers.Add(paymentMethodHandler.PaymentMethodId, paymentMethodHandler);
|
|
|
|
}
|
2019-05-29 14:33:31 +00:00
|
|
|
}
|
|
|
|
|
2024-04-04 16:31:04 +09:00
|
|
|
public bool TryGetValue(PaymentMethodId paymentMethodId, [MaybeNullWhen(false)] out IPaymentMethodHandler value)
|
|
|
|
{
|
|
|
|
ArgumentNullException.ThrowIfNull(paymentMethodId);
|
|
|
|
return _mappedHandlers.TryGetValue(paymentMethodId, out value);
|
|
|
|
}
|
|
|
|
public IPaymentMethodHandler? TryGet(PaymentMethodId paymentMethodId)
|
|
|
|
{
|
|
|
|
ArgumentNullException.ThrowIfNull(paymentMethodId);
|
|
|
|
_mappedHandlers.TryGetValue(paymentMethodId, out var value);
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public IPaymentMethodHandler this[PaymentMethodId index] => _mappedHandlers[index];
|
2019-06-07 00:45:10 +09:00
|
|
|
public bool Support(PaymentMethodId paymentMethod) => _mappedHandlers.ContainsKey(paymentMethod);
|
2019-05-29 14:33:31 +00:00
|
|
|
public IEnumerator<IPaymentMethodHandler> GetEnumerator()
|
|
|
|
{
|
|
|
|
return _mappedHandlers.Values.GetEnumerator();
|
|
|
|
}
|
|
|
|
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
|
|
{
|
|
|
|
return GetEnumerator();
|
|
|
|
}
|
2024-04-04 16:31:04 +09:00
|
|
|
|
|
|
|
public object? ParsePaymentPromptDetails(PaymentPrompt prompt)
|
|
|
|
{
|
|
|
|
if (prompt.Details is null or JToken { Type: JTokenType.Null })
|
|
|
|
return null;
|
|
|
|
if (!this.TryGetValue(prompt.PaymentMethodId, out var handler))
|
|
|
|
return null;
|
|
|
|
return handler.ParsePaymentPromptDetails(prompt.Details);
|
|
|
|
}
|
2019-05-29 14:33:31 +00:00
|
|
|
}
|
|
|
|
}
|