private static ListSubscriptions GetListSubscriptions()

in tools/code/extractor/Subscription.cs [59:114]


    private static ListSubscriptions GetListSubscriptions(IServiceProvider provider)
    {
        var findConfigurationNamesFactory = provider.GetRequiredService<FindConfigurationNamesFactory>();
        var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
        var pipeline = provider.GetRequiredService<HttpPipeline>();

        var findConfigurationSubscriptions = findConfigurationNamesFactory.Create<SubscriptionName>();
        var findConfigurationApis = findConfigurationNamesFactory.Create<ApiName>();
        var findConfigurationProducts = findConfigurationNamesFactory.Create<ProductName>();

        return cancellationToken =>
            findConfigurationSubscriptions()
                .Map(names => listFromSet(names, cancellationToken))
                .IfNone(() => listAll(cancellationToken))
                .Where(resource => shouldExtractSubscription(resource.Name, resource.Dto));

        IAsyncEnumerable<(SubscriptionName Name, SubscriptionDto Dto)> listFromSet(IEnumerable<SubscriptionName> names, CancellationToken cancellationToken) =>
            names.Select(name => SubscriptionUri.From(name, serviceUri))
                 .ToAsyncEnumerable()
                 .Choose(async uri =>
                 {
                     var dtoOption = await uri.TryGetDto(pipeline, cancellationToken);
                     return dtoOption.Map(dto => (uri.Name, dto));
                 });

        IAsyncEnumerable<(SubscriptionName, SubscriptionDto)> listAll(CancellationToken cancellationToken)
        {
            var subscriptionsUri = SubscriptionsUri.From(serviceUri);
            return subscriptionsUri.List(pipeline, cancellationToken);
        }

        bool shouldExtractSubscription(SubscriptionName name, SubscriptionDto dto)
        {
            var apiNamesOption = findConfigurationApis();
            var productNamesOption = findConfigurationProducts();

            var shouldExtractApi = (ApiName apiName) =>
                apiNamesOption.Map(names => names.Contains(apiName))
                              .IfNone(true);

            var shouldExtractProduct = (ProductName productName) =>
                productNamesOption.Map(names => names.Contains(productName))
                                  .IfNone(true);

            // Don't extract the master subscription
            return name != SubscriptionName.From("master")
                    // Don't extract subscription if its API should not be extracted
                    && common.SubscriptionModule.TryGetApiName(dto)
                                                .Map(shouldExtractApi)
                                                .IfNone(true)
                    // Don't extract subscription if its product should not be extracted
                    && common.SubscriptionModule.TryGetProductName(dto)
                                                .Map(shouldExtractProduct)
                                                .IfNone(true);
        }
    }