namespace NATS.Server.LeafNodes; public enum LeafMapDirection { Inbound, Outbound, } public sealed record LeafMappingResult(string Account, string Subject); public sealed class LeafHubSpokeMapper { private readonly IReadOnlyDictionary _hubToSpoke; private readonly IReadOnlyDictionary _spokeToHub; public LeafHubSpokeMapper(IReadOnlyDictionary hubToSpoke) { _hubToSpoke = hubToSpoke; _spokeToHub = hubToSpoke.ToDictionary(static p => p.Value, static p => p.Key, StringComparer.Ordinal); } public LeafMappingResult Map(string account, string subject, LeafMapDirection direction) { if (direction == LeafMapDirection.Outbound && _hubToSpoke.TryGetValue(account, out var spoke)) return new LeafMappingResult(spoke, subject); if (direction == LeafMapDirection.Inbound && _spokeToHub.TryGetValue(account, out var hub)) return new LeafMappingResult(hub, subject); return new LeafMappingResult(account, subject); } }