private async Task <Option <UserIndexedByEmail> > ReadUserByEmailIndexedEventAsync(string email)
        {
            var maybeResolvedEvent = await _connection.ReadLastStreamEvent(StreamBy(email));

            return(maybeResolvedEvent.Map(
                       resolvedEvent =>
            {
                var fromEventData = _eventSerializer.FromEventData(resolvedEvent.OriginalEvent);
                if (!fromEventData.HasValue)
                {
                    throw new Exception($"Could not read event of type {resolvedEvent.OriginalEvent.EventType}");
                }

                var @event = fromEventData.ValueOrFailure();
                if (!(@event is UserIndexedByEmail))
                {
                    var message = $"Expected event of type {typeof (UserIndexedByEmail).FullName} " +
                                  "but was '{@event.GetType().FullName}'";
                    throw new Exception(message);
                }

                return @event as UserIndexedByEmail;
            }));
        }