using System.Globalization;
using System.Text.Json;
namespace XFEEDToolBox.Core.Galaxy;
/// <summary>The original Civilization classifier's single result. DefinitionId is
/// the untouched metadata identifier; Defaulted marks a ready metadata missing-row
/// fallback. A None classification is not a claim about complete physical coverage.</summary>
public sealed record GalaxyNativeCivilizationFacts(ulong DefinitionId,string? Key,bool Defaulted=false)
{
public static GalaxyNativeCivilizationFacts? FromWire(JsonElement value)
{
if(value.ValueKind==JsonValueKind.Null)return null;
if(value.ValueKind!=JsonValueKind.Object||!value.TryGetProperty("definitionId",out var raw)||raw.ValueKind!=JsonValueKind.String||
!ulong.TryParse(raw.GetString(),NumberStyles.None,CultureInfo.InvariantCulture,out var id))
throw new InvalidDataException("原文明定义ID回执无效。");
if(!value.TryGetProperty("key",out var field)||field.ValueKind is not(JsonValueKind.String or JsonValueKind.Null))
throw new InvalidDataException("原文明分类回执无效。");
var rawKey=field.GetString();var key=rawKey is "none" or "human" or "guardian" or "thargoid"?rawKey:null;
var defaulted=false;
if(value.TryGetProperty("defaulted",out var fallback))
{
if(fallback.ValueKind is not(JsonValueKind.True or JsonValueKind.False))throw new InvalidDataException("原文明分类来源无效。");
defaulted=fallback.GetBoolean();
}
if(defaulted&&(id!=ulong.MaxValue||rawKey!="none"))throw new InvalidDataException("原文明缺行默认值不一致。");
return new(id,key,defaulted);
}
}
public sealed partial record GalaxyNativeSystemFacts
{
public GalaxyNativeCivilizationFacts? Civilization {get;init;}
public bool CivilizationRequested {get;init;}
}
using System.Globalization;
using System.Text.Json;
namespace XFEEDToolBox.Core.Galaxy;
/// <summary>The original Civilization classifier's single result. DefinitionId is
/// the untouched metadata identifier; Defaulted marks a ready metadata missing-row
/// fallback. A None classification is not a claim about complete physical coverage.</summary>
public sealed record GalaxyNativeCivilizationFacts(ulong DefinitionId,string? Key,bool Defaulted=false)
{
public static GalaxyNativeCivilizationFacts? FromWire(JsonElement value)
{
if(value.ValueKind==JsonValueKind.Null)return null;
if(value.ValueKind!=JsonValueKind.Object||!value.TryGetProperty("definitionId",out var raw)||raw.ValueKind!=JsonValueKind.String||
!ulong.TryParse(raw.GetString(),NumberStyles.None,CultureInfo.InvariantCulture,out var id))
throw new InvalidDataException("原文明定义ID回执无效。");
if(!value.TryGetProperty("key",out var field)||field.ValueKind is not(JsonValueKind.String or JsonValueKind.Null))
throw new InvalidDataException("原文明分类回执无效。");
var rawKey=field.GetString();var key=rawKey is "none" or "human" or "guardian" or "thargoid"?rawKey:null;
var defaulted=false;
if(value.TryGetProperty("defaulted",out var fallback))
{
if(fallback.ValueKind is not(JsonValueKind.True or JsonValueKind.False))throw new InvalidDataException("原文明分类来源无效。");
defaulted=fallback.GetBoolean();
}
if(defaulted&&(id!=ulong.MaxValue||rawKey!="none"))throw new InvalidDataException("原文明缺行默认值不一致。");
return new(id,key,defaulted);
}
}
public sealed partial record GalaxyNativeSystemFacts
{
public GalaxyNativeCivilizationFacts? Civilization {get;init;}
public bool CivilizationRequested {get;init;}
}