private object CoordinatorStateFromBinary(byte[] binary)
{
using (var stream = Decompress(binary))
{
var state = CoordinatorState.ParseFrom(stream);
var shards = ImmutableDictionary.CreateRange(state.ShardsList.Select(entry => new KeyValuePair<string, IActorRef>(entry.ShardId, ResolveActorRef(entry.RegionRef))));
var regionsZero = ImmutableDictionary.CreateRange(state.RegionsList.Select(region => new KeyValuePair<IActorRef, IImmutableList<string>>(ResolveActorRef(region), ImmutableList<string>.Empty)));
var regions = shards.Aggregate(regionsZero, (acc, entry) => acc.SetItem(entry.Value, acc[entry.Value].Add(entry.Key)));
var proxies = state.RegionProxiesList.Select(ResolveActorRef).ToImmutableHashSet();
var unallocatedShards = state.UnallocatedShardsList.ToImmutableHashSet();
return new PersistentShardCoordinator.State(
shards: shards,
regions: regions,
regionProxies: proxies,
unallocatedShards: unallocatedShards);
}
}