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; }
}