76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using System.Globalization;
|
|
using System.Text.Json;
|
|
|
|
namespace Asentrafin.Api.Services.Plaid;
|
|
|
|
internal static class PlaidJson
|
|
{
|
|
public static JsonElement? Property(this JsonElement element, string name)
|
|
{
|
|
return element.ValueKind == JsonValueKind.Object && element.TryGetProperty(name, out var value)
|
|
? value
|
|
: null;
|
|
}
|
|
|
|
public static string? String(this JsonElement element, string name)
|
|
{
|
|
var value = element.Property(name);
|
|
return value is { ValueKind: JsonValueKind.String } ? value.Value.GetString() : null;
|
|
}
|
|
|
|
public static decimal? Decimal(this JsonElement element, string name)
|
|
{
|
|
var value = element.Property(name);
|
|
return value is { ValueKind: JsonValueKind.Number } && value.Value.TryGetDecimal(out var parsed)
|
|
? parsed
|
|
: null;
|
|
}
|
|
|
|
public static int? Int(this JsonElement element, string name)
|
|
{
|
|
var value = element.Property(name);
|
|
return value is { ValueKind: JsonValueKind.Number } && value.Value.TryGetInt32(out var parsed)
|
|
? parsed
|
|
: null;
|
|
}
|
|
|
|
public static bool Bool(this JsonElement element, string name)
|
|
{
|
|
var value = element.Property(name);
|
|
return value is { ValueKind: JsonValueKind.True } ||
|
|
value is { ValueKind: JsonValueKind.False } && value.Value.GetBoolean();
|
|
}
|
|
|
|
public static DateOnly? Date(this JsonElement element, string name)
|
|
{
|
|
var value = element.String(name);
|
|
return DateOnly.TryParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsed)
|
|
? parsed
|
|
: null;
|
|
}
|
|
|
|
public static DateTimeOffset? DateTimeOffset(this JsonElement element, string name)
|
|
{
|
|
var value = element.String(name);
|
|
return System.DateTimeOffset.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var parsed)
|
|
? parsed
|
|
: null;
|
|
}
|
|
|
|
public static string[] StringArray(this JsonElement element, string name)
|
|
{
|
|
var value = element.Property(name);
|
|
if (value is not { ValueKind: JsonValueKind.Array })
|
|
{
|
|
return [];
|
|
}
|
|
|
|
return value.Value.EnumerateArray()
|
|
.Where(item => item.ValueKind == JsonValueKind.String)
|
|
.Select(item => item.GetString())
|
|
.Where(item => !string.IsNullOrWhiteSpace(item))
|
|
.Select(item => item!)
|
|
.ToArray();
|
|
}
|
|
}
|