public static IDomainEvent Deserialize(this ResolvedEvent resolvedEvent)
        {
            var dataType = EventTypeMap.GetType(resolvedEvent.Event.EventType);

            var data = JsonSerializer.Deserialize(resolvedEvent.Event.Data.Span, dataType) ?? throw new Exception($"Unable to read event of type {dataType?.FullName}");

            return((IDomainEvent)data);
        }
        private static void RegisterEventTypeNameMappings()
        {
            var domainEventTypes = typeof(IDomainEvent).Assembly.GetTypesThatImplementsInterface <IDomainEvent>();

            foreach (var domainEventType in domainEventTypes)
            {
                var parentClassName = domainEventType?.DeclaringType?.Name ?? throw new Exception($"Declaring type is not defined for type {domainEventType?.FullName}");

                if (!_versionRegex.IsMatch(parentClassName))
                {
                    parentClassName = "";
                }

                var suffix = string.IsNullOrWhiteSpace(parentClassName) ? "" : $"-{parentClassName}";

                EventTypeMap.AddType(domainEventType, $"{domainEventType.Name}{suffix}");
            }
        }