XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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;}
}