SchemaGenerator.cs•1.61 kB
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Azure.Bicep.Types;
using Azure.Bicep.Types.Az;
using AzureMcp.BicepSchema.Services.ResourceProperties;
using AzureMcp.BicepSchema.Services.ResourceProperties.Entities;
using AzureMcp.BicepSchema.Services.Support;
using Microsoft.Extensions.DependencyInjection;
namespace AzureMcp.BicepSchema.Services;
public static class SchemaGenerator
{
    public static List<ComplexType> GetResponse(TypesDefinitionResult typesDefinitionResult)
    {
        var allComplexTypes = new List<ComplexType>();
        allComplexTypes.AddRange(typesDefinitionResult.ResourceTypeEntities);
        allComplexTypes.AddRange(typesDefinitionResult.ResourceFunctionTypeEntities);
        allComplexTypes.AddRange(typesDefinitionResult.OtherComplexTypeEntities);
        return allComplexTypes;
    }
    public static TypesDefinitionResult GetResourceTypeDefinitions(
        IServiceProvider serviceProvider,
        string resourceTypeName,
        string? apiVersion = null)
    {
        ResourceVisitor resourceVisitor = serviceProvider.GetRequiredService<ResourceVisitor>();
        if (string.IsNullOrEmpty(apiVersion))
        {
            apiVersion = ApiVersionSelector.SelectLatestStable(resourceVisitor.GetResourceApiVersions(resourceTypeName));
        }
        return resourceVisitor.LoadSingleResource(resourceTypeName, apiVersion);
    }
    public static void ConfigureServices(ServiceCollection services)
    {
        services.AddSingleton<ITypeLoader, AzTypeLoader>();
        services.AddSingleton<ResourceVisitor>();
    }
}