40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
using System.Text.Json;
|
|
|
|
namespace MealPlan.Api.Services.Generators;
|
|
|
|
internal static class AiRecipeJsonParser
|
|
{
|
|
public static int GetInt32(JsonElement element, int fallback = 0)
|
|
{
|
|
return element.ValueKind switch
|
|
{
|
|
JsonValueKind.Number when element.TryGetInt32(out var value) => value,
|
|
JsonValueKind.Number => (int)element.GetDecimal(),
|
|
JsonValueKind.String when int.TryParse(element.GetString(), out var parsed) => parsed,
|
|
JsonValueKind.True => 1,
|
|
JsonValueKind.False => 0,
|
|
_ => fallback,
|
|
};
|
|
}
|
|
|
|
public static int? GetNullableInt32(JsonElement element)
|
|
{
|
|
if (element.ValueKind is JsonValueKind.Null or JsonValueKind.Undefined) return null;
|
|
return GetInt32(element);
|
|
}
|
|
|
|
public static decimal? GetNullableDecimal(JsonElement element)
|
|
{
|
|
return element.ValueKind switch
|
|
{
|
|
JsonValueKind.Null or JsonValueKind.Undefined => null,
|
|
JsonValueKind.Number => element.GetDecimal(),
|
|
JsonValueKind.String when decimal.TryParse(element.GetString(), out var parsed) => parsed,
|
|
_ => null,
|
|
};
|
|
}
|
|
|
|
public static string? GetString(JsonElement element) =>
|
|
element.ValueKind == JsonValueKind.String ? element.GetString() : element.ToString();
|
|
}
|