using System.Runtime.CompilerServices; using Penumbra.Api.Enums; namespace Penumbra.Api.Helpers; /// Wrapper dictionary. public sealed class GameResourceDict(IReadOnlyDictionary dict) : ConvertingDict(dict) { /// [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] protected override (string, string, ChangedItemIcon) ConvertValue(in (string, string, uint) from) => (from.Item1, from.Item2, (ChangedItemIcon)from.Item3); /// Create dictionary or null. [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public static GameResourceDict? Create(IReadOnlyDictionary? dict) => dict == null ? null : new GameResourceDict(dict); } /// Wrapper dictionary. public sealed class AvailableModSettings(IReadOnlyDictionary dict) : ConvertingDict(dict) { /// [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] protected override (string[], GroupType) ConvertValue(in (string[], int) from) => (from.Item1, (GroupType)from.Item2); /// Create dictionary or null. [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public static AvailableModSettings? Create(IReadOnlyDictionary? dict) => dict == null ? null : new AvailableModSettings(dict); } public record ResourceNodeDto { public required ResourceType Type { get; init; } public required ChangedItemIcon Icon { get; init; } public required string? Name { get; init; } public required string? GamePath { get; init; } public required string ActualPath { get; init; } public required nint ObjectAddress { get; init; } public required nint ResourceHandle { get; init; } public required List Children { get; init; } } public record ResourceTreeDto { public required string Name { get; init; } public required ushort RaceCode { get; init; } public required List Nodes { get; init; } }