using Aetheria.State.Documents; using GameCult.Caching; using GameCult.Networking; namespace Aetheria.State; public static class AetheriaDocumentRegistry { public static CultDocumentRegistry CreateCultCacheRegistry() { var registry = new CultDocumentRegistry(); foreach (var documentType in DocumentTypes) { registry.GetRequired(documentType); } return registry; } public static CultNetDocumentRegistry CreateCultNetRegistry(CultDocumentRegistry? cacheRegistry = null) { var registry = cacheRegistry ?? CreateCultCacheRegistry(); return new CultNetDocumentRegistry( registry, new[] { CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry), CultNetDocumentBinding.ForDocument(registry) }); } public static IReadOnlyList DocumentTypes { get; } = [ typeof(AetheriaWorldState), typeof(AetheriaItemDefinition), typeof(AetheriaCorporation), typeof(AetheriaPlayerProfile), typeof(AetheriaRuntimeSession), typeof(AetheriaMigrationLedger), typeof(AetheriaPlayerSettings), typeof(AetheriaSavedRun), typeof(AetheriaSavedZone), typeof(AetheriaEntitySnapshot) ]; }