using System.Diagnostics.CodeAnalysis; namespace NeonSprawl.Server.Game.Crafting; /// Adapter over (NEO-67). public sealed class RecipeDefinitionRegistry(RecipeDefinitionCatalog catalog) : IRecipeDefinitionRegistry { private readonly IReadOnlyList _definitionsInIdOrder = BuildDefinitionsInIdOrder(catalog); /// public bool TryGetDefinition(string? recipeId, [NotNullWhen(true)] out RecipeDefRow? definition) { if (recipeId is null) { definition = null; return false; } return catalog.TryGetRecipe(recipeId, out definition); } /// public IReadOnlyList GetDefinitionsInIdOrder() => _definitionsInIdOrder; private static IReadOnlyList BuildDefinitionsInIdOrder(RecipeDefinitionCatalog catalog) { string[] ids = [.. catalog.ById.Keys.OrderBy(k => k, StringComparer.Ordinal)]; var list = new List(ids.Length); foreach (var id in ids) { list.Add(catalog.ById[id]); } return list; } }