public static async Task <DuplicateSlugReport> CreateReportAsync(
            DuplicateSlugInfo info,
            PublishedEntityFinder finder)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }

            if (finder == null)
            {
                throw new ArgumentNullException(nameof(finder));
            }

            var publishedEntityIdentifier = await finder
                                            .FindPublishedEntityAsync(info.Key)
                                            .ConfigureAwait(false);

            return(publishedEntityIdentifier.Match(
                       identifier =>
            {
                Func <EntityIdentifier, ForgeEntity> projector = x =>
                                                                 new ForgeEntity(x.EntityId, x.TranslationId, x == identifier);
                return ToReport(info, projector);
            },
                       () =>
            {
                Func <EntityIdentifier, ForgeEntity> projector = x =>
                                                                 new ForgeEntity(x.EntityId, x.TranslationId, false);
                return ToReport(info, projector);
            }
                       ));
        }
        private static DuplicateSlugReport ToReport(
            DuplicateSlugInfo info,
            Func <EntityIdentifier, ForgeEntity> projector)
        {
            var forgeEntities = info.EntityIdentifiers.Select(projector).ToHashSet();

            return(new DuplicateSlugReport(info.Key, forgeEntities));
        }