private static ExtractProducts GetExtractProducts()

in tools/code/extractor/Product.cs [35:65]


    private static ExtractProducts GetExtractProducts(IServiceProvider provider)
    {
        var list = provider.GetRequiredService<ListProducts>();
        var writeArtifacts = provider.GetRequiredService<WriteProductArtifacts>();
        var extractPolicies = provider.GetRequiredService<ExtractProductPolicies>();
        var extractGroups = provider.GetRequiredService<ExtractProductGroups>();
        var extractTags = provider.GetRequiredService<ExtractProductTags>();
        var extractApis = provider.GetRequiredService<ExtractProductApis>();
        var activitySource = provider.GetRequiredService<ActivitySource>();
        var logger = provider.GetRequiredService<ILogger>();

        return async cancellationToken =>
        {
            using var _ = activitySource.StartActivity(nameof(ExtractProducts));

            logger.LogInformation("Extracting products...");

            await list(cancellationToken)
                    .IterParallel(async resource => await extractProduct(resource.Name, resource.Dto, cancellationToken),
                                  cancellationToken);
        };

        async ValueTask extractProduct(ProductName name, ProductDto dto, CancellationToken cancellationToken)
        {
            await writeArtifacts(name, dto, cancellationToken);
            await extractPolicies(name, cancellationToken);
            await extractGroups(name, cancellationToken);
            await extractTags(name, cancellationToken);
            await extractApis(name, cancellationToken);
        }
    }