2020-06-28 21:44:35 -05:00
|
|
|
using System;
|
2020-06-24 10:34:09 +09:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
2024-05-01 10:22:07 +09:00
|
|
|
using BTCPayServer.Payouts;
|
2020-06-24 10:34:09 +09:00
|
|
|
using NBitcoin;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
|
|
namespace BTCPayServer.Services
|
|
|
|
{
|
|
|
|
public interface IJsonConverterRegistration
|
|
|
|
{
|
|
|
|
JsonConverter CreateJsonConverter(BTCPayNetwork network);
|
|
|
|
}
|
|
|
|
public class JsonConverterRegistration : IJsonConverterRegistration
|
|
|
|
{
|
|
|
|
internal readonly Func<BTCPayNetwork, JsonConverter> _createConverter;
|
|
|
|
public JsonConverterRegistration(Func<BTCPayNetwork, JsonConverter> createConverter)
|
|
|
|
{
|
|
|
|
_createConverter = createConverter;
|
|
|
|
}
|
|
|
|
public JsonConverter CreateJsonConverter(BTCPayNetwork network)
|
|
|
|
{
|
|
|
|
return _createConverter(network);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class BTCPayNetworkJsonSerializerSettings
|
|
|
|
{
|
|
|
|
public BTCPayNetworkJsonSerializerSettings(BTCPayNetworkProvider networkProvider, IEnumerable<IJsonConverterRegistration> jsonSerializers)
|
|
|
|
{
|
2020-07-30 11:36:02 +09:00
|
|
|
foreach (var network in networkProvider.GetAll().OfType<BTCPayNetwork>())
|
2020-06-24 10:34:09 +09:00
|
|
|
{
|
|
|
|
var serializer = new JsonSerializerSettings();
|
|
|
|
foreach (var jsonSerializer in jsonSerializers)
|
|
|
|
{
|
|
|
|
serializer.Converters.Add(jsonSerializer.CreateJsonConverter(network));
|
|
|
|
}
|
|
|
|
foreach (var converter in network.NBXplorerNetwork.JsonSerializerSettings.Converters)
|
|
|
|
{
|
|
|
|
serializer.Converters.Add(converter);
|
|
|
|
}
|
2024-05-01 10:22:07 +09:00
|
|
|
// TODO: Get rid of this serializer
|
|
|
|
_Serializers.Add(PayoutTypes.CHAIN.GetPayoutMethodId(network.CryptoCode), serializer);
|
|
|
|
_Serializers.Add(PayoutTypes.LN.GetPayoutMethodId(network.CryptoCode), serializer);
|
2020-06-24 10:34:09 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-01 10:22:07 +09:00
|
|
|
readonly Dictionary<PayoutMethodId, JsonSerializerSettings> _Serializers = new Dictionary<PayoutMethodId, JsonSerializerSettings>();
|
|
|
|
public JsonSerializerSettings GetSerializer(PayoutMethodId payoutMethodId)
|
2020-06-24 10:34:09 +09:00
|
|
|
{
|
2024-05-01 10:22:07 +09:00
|
|
|
ArgumentNullException.ThrowIfNull(payoutMethodId);
|
|
|
|
_Serializers.TryGetValue(payoutMethodId, out var serializer);
|
2020-06-24 10:34:09 +09:00
|
|
|
return serializer;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|