mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 02:28:31 +01:00
44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json;
|
|
using System.Reflection;
|
|
using BTCPayServer.Payments.Lightning;
|
|
using NBitcoin.JsonConverters;
|
|
using System.Globalization;
|
|
|
|
namespace BTCPayServer.JsonConverters
|
|
{
|
|
public class LightMoneyJsonConverter : JsonConverter
|
|
{
|
|
public override bool CanConvert(Type objectType)
|
|
{
|
|
return typeof(LightMoneyJsonConverter).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo());
|
|
}
|
|
|
|
Type longType = typeof(long).GetTypeInfo();
|
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
|
{
|
|
try
|
|
{
|
|
return reader.TokenType == JsonToken.Null ? null :
|
|
reader.TokenType == JsonToken.Integer ?
|
|
longType.IsAssignableFrom(reader.ValueType) ? new LightMoney((long)reader.Value)
|
|
: new LightMoney(long.MaxValue) :
|
|
reader.TokenType == JsonToken.String ? new LightMoney(long.Parse((string)reader.Value, CultureInfo.InvariantCulture))
|
|
: null;
|
|
}
|
|
catch (InvalidCastException)
|
|
{
|
|
throw new JsonObjectException("Money amount should be in millisatoshi", reader);
|
|
}
|
|
}
|
|
|
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
{
|
|
writer.WriteValue(((LightMoney)value).MilliSatoshi);
|
|
}
|
|
}
|
|
}
|