[
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n#*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n/obj/\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Customers/Customer.cs",
    "content": "﻿namespace DotnetDocsShow.Extensions.Validation.Customers;\n\npublic class Customer\n{\n    public Guid Id { get; } = Guid.NewGuid();\n\n    public string FullName { get; init; } = default!;\n}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Customers/CustomerEndpoints.cs",
    "content": "﻿using FluentValidation;\n\nnamespace DotnetDocsShow.Extensions.Validation.Customers;\n\npublic static class CustomerEndpoints\n{\n    public static void MapCustomerEndpoints(this WebApplication app)\n    {\n        app.MapGet(\"/customers\", GetAllCustomers);\n        app.MapGet(\"/customers/{id}\", GetCustomerById);\n        app.MapPost(\"/customers\", CreateCustomer).WithValidator<Customer>();\n        app.MapPut(\"/customers/{id}\", UpdateCustomer);\n        app.MapDelete(\"/customers/{id}\", DeleteCustomerById);\n    }\n\n    public static void AddCustomerServices(this IServiceCollection services)\n    {\n        services.AddSingleton<ICustomerService, CustomerService>();\n    }\n\n    internal static List<Customer> GetAllCustomers(ICustomerService service)\n    {\n        return service.GetAll();\n    }\n\n    internal static IResult GetCustomerById(ICustomerService service, Guid id)\n    {\n        var customer = service.GetById(id);\n        return customer is not null ? Results.Ok(customer) : Results.NotFound();\n    }\n\n    internal static async Task<IResult> CreateCustomerWithValidation(\n        ICustomerService service, Customer customer,\n        IValidator<Customer> validator)\n    {\n        var validate = await validator.ValidateAsync(customer);\n        if (!validate.IsValid)\n        {\n            return Results.BadRequest(validate.Errors);\n        }\n\n        service.Create(customer);\n        return Results.Created($\"/customers/{customer.Id}\", customer);\n    }\n\n    internal static IResult CreateCustomer(\n        ICustomerService service, Customer customer)\n    {\n        service.Create(customer);\n        return Results.Created($\"/customers/{customer.Id}\", customer);\n    }\n\n    internal static IResult UpdateCustomer(ICustomerService service, Guid id, Customer updatedCustomer)\n    {\n        var customer = service.GetById(id);\n        if (customer is null)\n        {\n            return Results.NotFound();\n        }\n\n        service.Update(updatedCustomer);\n        return Results.Ok(updatedCustomer);\n    }\n\n    internal static IResult DeleteCustomerById(ICustomerService service, Guid id)\n    {\n        service.Delete(id);\n        return Results.Ok();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Customers/CustomerService.cs",
    "content": "﻿namespace DotnetDocsShow.Extensions.Validation.Customers;\n\npublic class CustomerService : ICustomerService\n{\n    private readonly Dictionary<Guid, Customer> _customers = new();\n\n    public void Create(Customer? customer)\n    {\n        if (customer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public Customer? GetById(Guid id)\n    {\n        return _customers.GetValueOrDefault(id);\n    }\n\n    public List<Customer> GetAll()\n    {\n        return _customers.Values.ToList();\n    }\n\n    public void Update(Customer customer)\n    {\n        var existingCustomer = GetById(customer.Id);\n        if (existingCustomer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public void Delete(Guid id)\n    {\n        _customers.Remove(id);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Customers/CustomerValidation.cs",
    "content": "﻿using FluentValidation;\n\nnamespace DotnetDocsShow.Extensions.Validation.Customers;\n\npublic class CustomerValidation : AbstractValidator<Customer>\n{\n    public CustomerValidation()\n    {\n        RuleFor(x => x.Id).NotEmpty();\n        RuleFor(x => x.FullName).NotEmpty();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Customers/ICustomerService.cs",
    "content": "﻿namespace DotnetDocsShow.Extensions.Validation.Customers;\n\npublic interface ICustomerService\n{\n    void Create(Customer? customer);\n\n    Customer? GetById(Guid id);\n\n    List<Customer> GetAll();\n\n    void Update(Customer customer);\n\n    void Delete(Guid id);\n}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/DotnetDocsShow.Extensions.Validation.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"FluentValidation.DependencyInjectionExtensions\" Version=\"10.3.4\" />\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/IAssemblyMarker.cs",
    "content": "﻿namespace DotnetDocsShow.Extensions.Validation;\n\npublic interface IAssemblyMarker{}\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/Program.cs",
    "content": "﻿using DotnetDocsShow.Extensions.Validation;\nusing DotnetDocsShow.Extensions.Validation.Customers;\nusing FluentValidation;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddCustomerServices();\nbuilder.Services.AddValidatorsFromAssemblyContaining(typeof(IAssemblyMarker));\n\nvar app = builder.Build();\napp.MapCustomerEndpoints();\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.Extensions.Validation/ValidationExtensions.cs",
    "content": "﻿using FluentValidation;\n\nnamespace DotnetDocsShow.Extensions.Validation;\n\npublic static class ValidationExtensions\n{\n    public static RouteHandlerBuilder WithValidator<TType>(\n        this RouteHandlerBuilder builder) where TType : class\n    {\n        builder.Add(endpointBuilder =>\n        {\n            var originalRequestDelegate = endpointBuilder.RequestDelegate;\n            endpointBuilder.RequestDelegate = async context =>\n            {\n                var validator = context.RequestServices.GetService<IValidator<TType>>();\n\n                if (validator is null)\n                {\n                    await originalRequestDelegate!(context);\n                    return;\n                }\n\n                context.Request.EnableBuffering();\n                var model = await context.Request.ReadFromJsonAsync<TType>();\n                if (model is null)\n                {\n                    context.Response.StatusCode = 400;\n                    await context.Response.WriteAsJsonAsync(new\n                    {\n                        error = \"Couldn't map the model from the request body\"\n                    });\n                    return;\n                }\n\n                var result = await validator.ValidateAsync(model);\n                if (!result.IsValid)\n                {\n                    context.Response.StatusCode = 400;\n                    await context.Response.WriteAsJsonAsync(new { errors = result.Errors });\n                    return;\n                }\n\n                context.Request.Body.Position = 0;\n                await originalRequestDelegate!(context);\n            };\n        });\n        return builder;\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Intro.MinimalApi/DotnetDocsShow.Intro.MinimalApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Intro.MinimalApi/Program.cs",
    "content": "﻿var app = WebApplication.Create();\n\napp.MapGet(\"helloworld\", () => \"Hello world!\");\n\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/DotnetDocsShow.MinimalApiTests.Structured.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"5.6.3\" />\n    </ItemGroup>\n    <ItemGroup>\n        <InternalsVisibleTo Include=\"DotnetDocsShow.Tests.Integration\" />\n        <InternalsVisibleTo Include=\"DotnetDocsShow.Tests.Unit\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/EndpointDefinitionExtensions.cs",
    "content": "﻿namespace DotnetDocsShow.MinimalApiTests.Structured;\n\npublic static class EndpointDefinitionExtensions\n{\n    public static void AddEndpointDefinitions(\n        this IServiceCollection services, params Type[] scanMarkers)\n    {\n        var endpointDefinitions = new List<IEndpointDefinition>();\n\n        foreach (var marker in scanMarkers)\n        {\n            endpointDefinitions.AddRange(\n                marker.Assembly.ExportedTypes\n                    .Where(x => typeof(IEndpointDefinition).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)\n                    .Select(Activator.CreateInstance).Cast<IEndpointDefinition>()\n            );\n        }\n\n        foreach (var endpointDefinition in endpointDefinitions)\n        {\n            endpointDefinition.DefineServices(services);\n        }\n\n        services.AddSingleton(endpointDefinitions as IReadOnlyCollection<IEndpointDefinition>);\n    }\n\n    public static void UseEndpointDefinitions(this WebApplication app)\n    {\n        var definitions = app.Services.GetRequiredService<IReadOnlyCollection<IEndpointDefinition>>();\n\n        foreach (var endpointDefinition in definitions)\n        {\n            endpointDefinition.DefineEndpoints(app);\n        }\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/EndpointDefinitions/CustomerEndpointDefinition.cs",
    "content": "﻿using DotnetDocsShow.MinimalApiTests.Structured.Models;\nusing DotnetDocsShow.MinimalApiTests.Structured.Services;\n\nnamespace DotnetDocsShow.MinimalApiTests.Structured.EndpointDefinitions;\n\npublic class CustomerEndpointDefinition : IEndpointDefinition\n{\n    public void DefineEndpoints(WebApplication app)\n    {\n        app.MapGet(\"/customers\", GetAllCustomers);\n        app.MapGet(\"/customers/{id}\", GetCustomerById);\n        app.MapPost(\"/customers\", CreateCustomer);\n        app.MapPut(\"/customers/{id}\", UpdateCustomer);\n        app.MapDelete(\"/customers/{id}\", DeleteCustomerById);\n    }\n\n    internal List<Customer> GetAllCustomers(ICustomerService service)\n    {\n        return service.GetAll();\n    }\n\n    internal IResult GetCustomerById(ICustomerService service, Guid id)\n    {\n        var customer = service.GetById(id);\n        return customer is not null ? Results.Ok(customer) : Results.NotFound();\n    }\n\n    internal IResult CreateCustomer(ICustomerService service, Customer customer)\n    {\n        service.Create(customer);\n        return Results.Created($\"/customers/{customer.Id}\", customer);\n    }\n\n    internal IResult UpdateCustomer(ICustomerService service, Guid id, Customer updatedCustomer)\n    {\n        var customer = service.GetById(id);\n        if (customer is null)\n        {\n            return Results.NotFound();\n        }\n\n        service.Update(updatedCustomer);\n        return Results.Ok(updatedCustomer);\n    }\n\n    internal IResult DeleteCustomerById(ICustomerService service, Guid id)\n    {\n        service.Delete(id);\n        return Results.Ok();\n    }\n\n    public void DefineServices(IServiceCollection services)\n    {\n        services.AddSingleton<ICustomerService, CustomerService>();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/EndpointDefinitions/SwaggerEndpointDefinition.cs",
    "content": "﻿using Microsoft.OpenApi.Models;\n\nnamespace DotnetDocsShow.MinimalApiTests.Structured.EndpointDefinitions;\n\npublic class SwaggerEndpointDefinition : IEndpointDefinition\n{\n    public void DefineEndpoints(WebApplication app)\n    {\n        app.UseSwagger();\n        app.UseSwaggerUI(c => c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"DotnetDocsShow.MinimalApiTests.Structured v1\"));\n    }\n\n    public void DefineServices(IServiceCollection services)\n    {\n        services.AddEndpointsApiExplorer();\n        services.AddSwaggerGen(c =>\n        {\n            c.SwaggerDoc(\"v1\", new OpenApiInfo { Title = \"DotnetDocsShow.MinimalApiTests.Structured\", Version = \"v1\" });\n        });\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/IEndpointDefinition.cs",
    "content": "﻿namespace DotnetDocsShow.MinimalApiTests.Structured;\n\npublic interface IEndpointDefinition\n{\n    void DefineServices(IServiceCollection services);\n\n    void DefineEndpoints(WebApplication app);\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/Models/Customer.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace DotnetDocsShow.MinimalApiTests.Structured.Models;\n\npublic class Customer\n{\n    [JsonPropertyName(\"id\")]\n    public Guid Id { get; init; } = Guid.NewGuid();\n\n    [JsonPropertyName(\"fullName\")]\n    public string FullName { get; init; } = default!;\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/Program.cs",
    "content": "﻿using DotnetDocsShow.MinimalApiTests.Structured;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddEndpointDefinitions(typeof(IEndpointDefinition));\n\nvar app = builder.Build();\napp.UseEndpointDefinitions();\n\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/Services/CustomerService.cs",
    "content": "﻿using DotnetDocsShow.MinimalApiTests.Structured.Models;\n\nnamespace DotnetDocsShow.MinimalApiTests.Structured.Services;\n\npublic class CustomerService : ICustomerService\n{\n    private readonly Dictionary<Guid, Customer> _customers = new();\n\n    public void Create(Customer? customer)\n    {\n        if (customer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public Customer? GetById(Guid id)\n    {\n        return _customers.GetValueOrDefault(id);\n    }\n\n    public List<Customer> GetAll()\n    {\n        return _customers.Values.ToList();\n    }\n\n    public void Update(Customer customer)\n    {\n        var existingCustomer = GetById(customer.Id);\n        if (existingCustomer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public void Delete(Guid id)\n    {\n        _customers.Remove(id);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.MinimalApiTests.Structured/Services/ICustomerService.cs",
    "content": "﻿using DotnetDocsShow.MinimalApiTests.Structured.Models;\n\nnamespace DotnetDocsShow.MinimalApiTests.Structured.Services;\n\npublic interface ICustomerService\n{\n    void Create(Customer? customer);\n\n    Customer? GetById(Guid id);\n\n    List<Customer> GetAll();\n\n    void Update(Customer customer);\n\n    void Delete(Guid id);\n}\n"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/Controllers/WeatherForecastController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\n\nnamespace DotnetDocsShow.NewWebApi.Controllers;\n\n[ApiController]\n[Route(\"[controller]\")]\npublic class WeatherForecastController : ControllerBase\n{\n    private static readonly Random  Random = new(489);\n    private static readonly string[] Summaries = {\n        \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n    };\n\n    [HttpGet(Name = \"GetWeatherForecast\")]\n    public IEnumerable<WeatherForecast> Get()\n    {\n        return Enumerable.Range(1, 5).Select(index => new WeatherForecast\n            {\n                Date = DateTime.Now.AddDays(index),\n                TemperatureC = Random.Next(-20, 55),\n                Summary = Summaries[Random.Next(Summaries.Length)]\n            })\n            .ToArray();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/DotnetDocsShow.NewWebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <TargetFramework>net6.0</TargetFramework>\n        <Nullable>enable</Nullable>\n        <ImplicitUsings>enable</ImplicitUsings>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"6.1.5\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\n\n// Add services to the container.\n\nbuilder.Services.AddControllers();\n// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\n\nvar app = builder.Build();\n\n// Configure the HTTP request pipeline.\nif (app.Environment.IsDevelopment())\n{\n    app.UseSwagger();\n    app.UseSwaggerUI();\n}\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.MapControllers();\n\napp.Run();"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/Properties/launchSettings.json",
    "content": "﻿{\n  \"$schema\": \"https://json.schemastore.org/launchsettings.json\",\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:56176\",\n      \"sslPort\": 44384\n    }\n  },\n  \"profiles\": {\n    \"DotnetDocsShow.NewWebApi\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": false,\n      \"launchUrl\": \"swagger\",\n      \"applicationUrl\": \"https://localhost:7256;http://localhost:5256\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"swagger\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/WeatherForecast.cs",
    "content": "namespace DotnetDocsShow.NewWebApi;\n\npublic class WeatherForecast\n{\n    public DateTime Date { get; set; }\n\n    public int TemperatureC { get; set; }\n\n    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n\n    public string? Summary { get; set; }\n}"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "DotnetDocsShow.NewWebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/Controllers/WeatherForecastController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\n\nnamespace DotnetDocsShow.OldWebApi.Controllers;\n\n[ApiController]\n[Route(\"[controller]\")]\npublic class WeatherForecastController : ControllerBase\n{\n    private static readonly Random  Random = new(489);\n    private static readonly string[] Summaries = {\n        \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n    };\n\n    [HttpGet]\n    public IEnumerable<WeatherForecast> Get()\n    {\n        return Enumerable.Range(1, 5).Select(index => new WeatherForecast\n            {\n                Date = DateTime.Now.AddDays(index),\n                TemperatureC = Random.Next(-20, 55),\n                Summary = Summaries[Random.Next(Summaries.Length)]\n            })\n            .ToArray();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/DotnetDocsShow.OldWebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"5.6.3\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/Program.cs",
    "content": "namespace DotnetDocsShow.OldWebApi;\n\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        CreateHostBuilder(args).Build().Run();\n    }\n\n    public static IHostBuilder CreateHostBuilder(string[] args) =>\n        Host.CreateDefaultBuilder(args)\n            .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });\n}"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/Properties/launchSettings.json",
    "content": "﻿{\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:17516\",\n      \"sslPort\": 44325\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"swagger\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"DotnetDocsShow.OldWebApi\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": \"true\",\n      \"launchBrowser\": false,\n      \"launchUrl\": \"swagger\",\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/Startup.cs",
    "content": "using Microsoft.OpenApi.Models;\n\nnamespace DotnetDocsShow.OldWebApi;\n\npublic class Startup\n{\n    public Startup(IConfiguration configuration)\n    {\n        Configuration = configuration;\n    }\n\n    public IConfiguration Configuration { get; }\n\n    // This method gets called by the runtime. Use this method to add services to the container.\n    public void ConfigureServices(IServiceCollection services)\n    {\n        services.AddControllers();\n        services.AddSwaggerGen(c =>\n        {\n            c.SwaggerDoc(\"v1\", new OpenApiInfo { Title = \"DotnetDocsShow.OldWebApi\", Version = \"v1\" });\n        });\n    }\n\n    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n    {\n        if (env.IsDevelopment())\n        {\n            app.UseDeveloperExceptionPage();\n            app.UseSwagger();\n            app.UseSwaggerUI(c => c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"DotnetDocsShow.OldWebApi v1\"));\n        }\n\n        app.UseHttpsRedirection();\n\n        app.UseRouting();\n\n        app.UseAuthorization();\n\n        app.UseEndpoints(endpoints => { endpoints.MapControllers(); });\n    }\n}"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/WeatherForecast.cs",
    "content": "namespace DotnetDocsShow.OldWebApi;\n\npublic class WeatherForecast\n{\n    public DateTime Date { get; set; }\n\n    public int TemperatureC { get; set; }\n\n    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n\n    public string Summary { get; set; }\n}"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "DotnetDocsShow.OldWebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "DotnetDocsShow.PerformanceTests/DotnetDocsShow.PerformanceTests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"NBomber\" Version=\"2.1.1\" />\n        <PackageReference Include=\"NBomber.Http\" Version=\"2.0.1\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.PerformanceTests/Program.cs",
    "content": "﻿using NBomber.Contracts;\nusing NBomber.CSharp;\nusing NBomber.Plugins.Http.CSharp;\n\nvar httpFactory = HttpClientFactory.Create();\n\nvar oldWebApiStep = CreateStep(\"old_web_api_step\", httpFactory, \"https://localhost:5001/weatherforecast\");\nvar newWebApiStep = CreateStep(\"new_web_api_step\", httpFactory, \"https://localhost:7256/weatherforecast\");\nvar minimalApiStep = CreateStep(\"minimal_api_step\", httpFactory, \"https://localhost:1337/weatherforecast\");\n\nvar oldWebApiScenario = CreateScenario(\"old_web_api\", oldWebApiStep, 10, TimeSpan.FromSeconds(60));\nvar newWebApiScenario = CreateScenario(\"new_web_api\", newWebApiStep, 10, TimeSpan.FromSeconds(60));\nvar minimalApiScenario = CreateScenario(\"minimal_api\", minimalApiStep, 10, TimeSpan.FromSeconds(60));\n\nNBomberRunner\n    .RegisterScenarios(oldWebApiScenario, newWebApiScenario, minimalApiScenario)\n    .Run();\n\nIStep CreateStep(string stepName, IClientFactory<HttpClient> httpClientFactory, string endpoint) =>\n    Step.Create(stepName, httpClientFactory, async context =>\n    {\n        var response = await context.Client.GetAsync(endpoint, context.CancellationToken);\n\n        return response.IsSuccessStatusCode\n            ? Response.Ok(statusCode: (int)response.StatusCode)\n            : Response.Fail(statusCode: (int)response.StatusCode);\n    });\n\nScenario CreateScenario(string scenarioName, IStep step, int copies, TimeSpan duration) =>\n    ScenarioBuilder\n        .CreateScenario(scenarioName, step)\n        .WithWarmUpDuration(TimeSpan.FromSeconds(5))\n        .WithLoadSimulations(Simulation.KeepConstant(copies, duration));\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/Customers/Customer.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Extensions.Customers;\n\npublic class Customer\n{\n    public Guid Id { get; } = Guid.NewGuid();\n\n    public string FullName { get; init; } = default!;\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/Customers/CustomerEndpoints.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Extensions.Customers;\n\npublic static class CustomerEndpoints\n{\n    public static void MapCustomerEndpoints(this WebApplication app)\n    {\n        app.MapGet(\"/customers\", GetAllCustomers);\n        app.MapGet(\"/customers/{id}\", GetCustomerById);\n        app.MapPost(\"/customers\", CreateCustomer);\n        app.MapPut(\"/customers/{id}\", UpdateCustomer);\n        app.MapDelete(\"/customers/{id}\", DeleteCustomerById);\n    }\n\n    public static void AddCustomerServices(this IServiceCollection services)\n    {\n        services.AddSingleton<ICustomerService, CustomerService>();\n    }\n\n    internal static List<Customer> GetAllCustomers(ICustomerService service)\n    {\n        return service.GetAll();\n    }\n\n    internal static IResult GetCustomerById(ICustomerService service, Guid id)\n    {\n        var customer = service.GetById(id);\n        return customer is not null ? Results.Ok(customer) : Results.NotFound();\n    }\n\n    internal static IResult CreateCustomer(ICustomerService service, Customer customer)\n    {\n        service.Create(customer);\n        return Results.Created($\"/customers/{customer.Id}\", customer);\n    }\n\n    internal static IResult UpdateCustomer(ICustomerService service, Guid id, Customer updatedCustomer)\n    {\n        var customer = service.GetById(id);\n        if (customer is null)\n        {\n            return Results.NotFound();\n        }\n\n        service.Update(updatedCustomer);\n        return Results.Ok(updatedCustomer);\n    }\n\n    internal static IResult DeleteCustomerById(ICustomerService service, Guid id)\n    {\n        service.Delete(id);\n        return Results.Ok();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/Customers/CustomerService.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Extensions.Customers;\n\npublic class CustomerService : ICustomerService\n{\n    private readonly Dictionary<Guid, Customer> _customers = new();\n\n    public void Create(Customer? customer)\n    {\n        if (customer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public Customer? GetById(Guid id)\n    {\n        return _customers.GetValueOrDefault(id);\n    }\n\n    public List<Customer> GetAll()\n    {\n        return _customers.Values.ToList();\n    }\n\n    public void Update(Customer customer)\n    {\n        var existingCustomer = GetById(customer.Id);\n        if (existingCustomer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public void Delete(Guid id)\n    {\n        _customers.Remove(id);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/Customers/ICustomerService.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Extensions.Customers;\n\npublic interface ICustomerService\n{\n    void Create(Customer? customer);\n\n    Customer? GetById(Guid id);\n\n    List<Customer> GetAll();\n\n    void Update(Customer customer);\n\n    void Delete(Guid id);\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/DotnetDocsShow.Structured.Extensions.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Extensions/Program.cs",
    "content": "﻿using DotnetDocsShow.Structured.Extensions.Customers;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddCustomerServices();\n\nvar app = builder.Build();\n\napp.MapCustomerEndpoints();\n\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/DotnetDocsShow.Structured.Mediator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"MediatR.Extensions.Microsoft.DependencyInjection\" Version=\"9.0.0\" />\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Handlers/CreateCustomerRequestHandler.cs",
    "content": "﻿using System.Text.Json.Serialization;\nusing DotnetDocsShow.Structured.Mediator.Models;\nusing DotnetDocsShow.Structured.Mediator.Services;\nusing MediatR;\n\nnamespace DotnetDocsShow.Structured.Mediator.Handlers;\n\npublic record CreateCustomerRequest : IRequest<IResult>\n{\n    [JsonPropertyName(\"id\")]\n    public Guid Id { get; init; } = Guid.NewGuid();\n\n    [JsonPropertyName(\"fullName\")]\n    public string FullName { get; init; } = default!;\n}\n\npublic class CreateCustomerRequestHandler\n    : IRequestHandler<CreateCustomerRequest, IResult>\n{\n    private readonly ICustomerService _customerService;\n\n    public CreateCustomerRequestHandler(ICustomerService customerService)\n    {\n        _customerService = customerService;\n    }\n\n    public Task<IResult> Handle(CreateCustomerRequest request, CancellationToken cancellationToken)\n    {\n        var customer = new Customer\n        {\n            FullName = request.FullName,\n            Id = request.Id\n        };\n        _customerService.Create(customer);\n        var response = Results.Created($\"/customers/{customer.Id}\", customer);\n        return Task.FromResult(response);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Handlers/DeleteCustomerByIdRequestHandler.cs",
    "content": "﻿using System.Text.Json.Serialization;\nusing DotnetDocsShow.Structured.Mediator.Services;\nusing MediatR;\n\nnamespace DotnetDocsShow.Structured.Mediator.Handlers;\n\npublic record DeleteCustomerByIdRequest : IRequest<IResult>\n{\n    [JsonPropertyName(\"id\")]\n    public Guid Id { get; init; }\n\n    public DeleteCustomerByIdRequest(Guid id)\n    {\n        Id = id;\n    }\n}\n\npublic class DeleteCustomerByIdRequestHandler\n    : IRequestHandler<DeleteCustomerByIdRequest, IResult>\n{\n    private readonly ICustomerService _customerService;\n\n    public DeleteCustomerByIdRequestHandler(ICustomerService customerService)\n    {\n        _customerService = customerService;\n    }\n\n    public Task<IResult> Handle(DeleteCustomerByIdRequest request, CancellationToken cancellationToken)\n    {\n        _customerService.Delete(request.Id);\n        return Task.FromResult(Results.Ok());\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Handlers/GetAllCustomersRequestHandler.cs",
    "content": "﻿using DotnetDocsShow.Structured.Mediator.Services;\nusing MediatR;\n\nnamespace DotnetDocsShow.Structured.Mediator.Handlers;\n\npublic record GetAllCustomersRequest : IRequest<IResult>;\n\npublic class GetAllCustomersRequestHandler\n    : IRequestHandler<GetAllCustomersRequest, IResult>\n{\n    private readonly ICustomerService _customerService;\n\n    public GetAllCustomersRequestHandler(ICustomerService customerService)\n    {\n        _customerService = customerService;\n    }\n\n    public Task<IResult> Handle(\n        GetAllCustomersRequest request, CancellationToken cancellationToken)\n    {\n        var customers = _customerService.GetAll();\n        var response = Results.Ok(customers);\n        return Task.FromResult(response);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Handlers/GetCustomerByIdRequestHandler.cs",
    "content": "﻿using System.Text.Json.Serialization;\nusing DotnetDocsShow.Structured.Mediator.Services;\nusing MediatR;\n\nnamespace DotnetDocsShow.Structured.Mediator.Handlers;\n\npublic record GetCustomerByIdRequest : IRequest<IResult>\n{\n    [JsonPropertyName(\"id\")]\n    public Guid Id { get; init; }\n\n    public GetCustomerByIdRequest(Guid id)\n    {\n        Id = id;\n    }\n}\n\npublic class GetCustomerByIdRequestHandler\n    : IRequestHandler<GetCustomerByIdRequest, IResult>\n{\n    private readonly ICustomerService _customerService;\n\n    public GetCustomerByIdRequestHandler(ICustomerService customerService)\n    {\n        _customerService = customerService;\n    }\n\n    public Task<IResult> Handle(GetCustomerByIdRequest request, CancellationToken cancellationToken)\n    {\n        var customer = _customerService.GetById(request.Id);\n        var response = customer is not null ? Results.Ok(customer) : Results.NotFound();\n        return Task.FromResult(response);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Models/Customer.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Mediator.Models;\n\npublic class Customer\n{\n    public Guid Id { get; init; } = Guid.NewGuid();\n\n    public string FullName { get; init; } = default!;\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Program.cs",
    "content": "﻿using DotnetDocsShow.Structured.Mediator;\nusing DotnetDocsShow.Structured.Mediator.Handlers;\nusing DotnetDocsShow.Structured.Mediator.Models;\nusing DotnetDocsShow.Structured.Mediator.Services;\nusing MediatR;\n\nvar builder = WebApplication.CreateBuilder();\n\nbuilder.Services.AddSingleton<ICustomerService, CustomerService>();\nbuilder.Services.AddMediatR(typeof(Customer));\n\nvar app = builder.Build();\n\napp.MapGet(\"customers\", async (IMediator mediator) => await mediator.Send(new GetAllCustomersRequest()));\napp.MapGet(\"/customers/{id}\", async (IMediator mediator, Guid id) => await mediator.Send(new GetCustomerByIdRequest(id)));\napp.MapPost(\"/customers\", async (IMediator mediator, CreateCustomerRequest request) => await mediator.Send(request));\napp.MapDelete(\"/customers/{id}\", async (IMediator mediator, Guid id) => await mediator.Send(new DeleteCustomerByIdRequest(id)));\n\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Services/CustomerService.cs",
    "content": "﻿using DotnetDocsShow.Structured.Mediator.Models;\n\nnamespace DotnetDocsShow.Structured.Mediator.Services;\n\npublic class CustomerService : ICustomerService\n{\n    private readonly Dictionary<Guid, Customer> _customers = new();\n\n    public void Create(Customer? customer)\n    {\n        if (customer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public Customer? GetById(Guid id)\n    {\n        return _customers.GetValueOrDefault(id);\n    }\n\n    public List<Customer> GetAll()\n    {\n        return _customers.Values.ToList();\n    }\n\n    public void Update(Customer customer)\n    {\n        var existingCustomer = GetById(customer.Id);\n        if (existingCustomer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public void Delete(Guid id)\n    {\n        _customers.Remove(id);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Mediator/Services/ICustomerService.cs",
    "content": "﻿using DotnetDocsShow.Structured.Mediator.Models;\n\nnamespace DotnetDocsShow.Structured.Mediator.Services;\n\npublic interface ICustomerService\n{\n    void Create(Customer? customer);\n\n    Customer? GetById(Guid id);\n\n    List<Customer> GetAll();\n\n    void Update(Customer customer);\n\n    void Delete(Guid id);\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/DotnetDocsShow.Structured.Scanning.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"5.6.3\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/EndpointDefinitionExtensions.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Scanning;\n\npublic static class EndpointDefinitionExtensions\n{\n    public static void AddEndpointDefinitions(\n        this IServiceCollection services, params Type[] scanMarkers)\n    {\n        var endpointDefinitions = new List<IEndpointDefinition>();\n\n        foreach (var marker in scanMarkers)\n        {\n            endpointDefinitions.AddRange(\n                marker.Assembly.ExportedTypes\n                    .Where(x => typeof(IEndpointDefinition).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)\n                    .Select(Activator.CreateInstance).Cast<IEndpointDefinition>()\n            );\n        }\n\n        foreach (var endpointDefinition in endpointDefinitions)\n        {\n            endpointDefinition.DefineServices(services);\n        }\n\n        services.AddSingleton(endpointDefinitions as IReadOnlyCollection<IEndpointDefinition>);\n    }\n\n    public static void UseEndpointDefinitions(this WebApplication app)\n    {\n        var definitions = app.Services.GetRequiredService<IReadOnlyCollection<IEndpointDefinition>>();\n\n        foreach (var endpointDefinition in definitions)\n        {\n            endpointDefinition.DefineEndpoints(app);\n        }\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/EndpointDefinitions/CustomerEndpointDefinition.cs",
    "content": "﻿using DotnetDocsShow.Structured.Scanning.Models;\nusing DotnetDocsShow.Structured.Scanning.Services;\n\nnamespace DotnetDocsShow.Structured.Scanning.EndpointDefinitions;\n\npublic class CustomerEndpointDefinition : IEndpointDefinition\n{\n    public void DefineEndpoints(WebApplication app)\n    {\n        app.MapGet(\"/customers\", GetAllCustomers);\n        app.MapGet(\"/customers/{id}\", GetCustomerById);\n        app.MapPost(\"/customers\", CreateCustomer);\n        app.MapPut(\"/customers/{id}\", UpdateCustomer);\n        app.MapDelete(\"/customers/{id}\", DeleteCustomerById);\n    }\n\n    internal List<Customer> GetAllCustomers(ICustomerService service)\n    {\n        return service.GetAll();\n    }\n\n    internal IResult GetCustomerById(ICustomerService service, Guid id)\n    {\n        var customer = service.GetById(id);\n        return customer is not null ? Results.Ok(customer) : Results.NotFound();\n    }\n\n    internal IResult CreateCustomer(ICustomerService service, Customer customer)\n    {\n        service.Create(customer);\n        return Results.Created($\"/customers/{customer.Id}\", customer);\n    }\n\n    internal IResult UpdateCustomer(ICustomerService service, Guid id, Customer updatedCustomer)\n    {\n        var customer = service.GetById(id);\n        if (customer is null)\n        {\n            return Results.NotFound();\n        }\n\n        service.Update(updatedCustomer);\n        return Results.Ok(updatedCustomer);\n    }\n\n    internal IResult DeleteCustomerById(ICustomerService service, Guid id)\n    {\n        service.Delete(id);\n        return Results.Ok();\n    }\n\n    public void DefineServices(IServiceCollection services)\n    {\n        services.AddSingleton<ICustomerService, CustomerService>();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/EndpointDefinitions/PaymentsEndpointDefinition.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Scanning.EndpointDefinitions;\n\npublic class PaymentsEndpointDefinition : IEndpointDefinition\n{\n    public void DefineServices(IServiceCollection services)\n    {\n\n    }\n\n    public void DefineEndpoints(WebApplication app)\n    {\n\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/EndpointDefinitions/SwaggerEndpointDefinition.cs",
    "content": "﻿using Microsoft.OpenApi.Models;\n\nnamespace DotnetDocsShow.Structured.Scanning.EndpointDefinitions;\n\npublic class SwaggerEndpointDefinition : IEndpointDefinition\n{\n    public void DefineEndpoints(WebApplication app)\n    {\n        app.UseSwagger();\n        app.UseSwaggerUI(c => c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"DotnetDocsShow.Structured.Custom v1\"));\n    }\n\n    public void DefineServices(IServiceCollection services)\n    {\n        services.AddEndpointsApiExplorer();\n        services.AddSwaggerGen(c =>\n        {\n            c.SwaggerDoc(\"v1\", new OpenApiInfo { Title = \"DotnetDocsShow.Structured.Custom\", Version = \"v1\" });\n        });\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/IEndpointDefinition.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Scanning;\n\npublic interface IEndpointDefinition\n{\n    void DefineServices(IServiceCollection services);\n\n    void DefineEndpoints(WebApplication app);\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/Models/Customer.cs",
    "content": "﻿namespace DotnetDocsShow.Structured.Scanning.Models;\n\npublic class Customer\n{\n    public Guid Id { get; init; } = Guid.NewGuid();\n\n    public string FullName { get; init; } = default!;\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/Program.cs",
    "content": "﻿using DotnetDocsShow.Structured.Scanning;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddEndpointDefinitions(typeof(IEndpointDefinition));\n\nvar app = builder.Build();\napp.UseEndpointDefinitions();\n\napp.Run();\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/Services/CustomerService.cs",
    "content": "﻿using DotnetDocsShow.Structured.Scanning.Models;\n\nnamespace DotnetDocsShow.Structured.Scanning.Services;\n\npublic class CustomerService : ICustomerService\n{\n    private readonly Dictionary<Guid, Customer> _customers = new();\n\n    public void Create(Customer? customer)\n    {\n        if (customer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public Customer? GetById(Guid id)\n    {\n        return _customers.GetValueOrDefault(id);\n    }\n\n    public List<Customer> GetAll()\n    {\n        return _customers.Values.ToList();\n    }\n\n    public void Update(Customer customer)\n    {\n        var existingCustomer = GetById(customer.Id);\n        if (existingCustomer is null)\n        {\n            return;\n        }\n\n        _customers[customer.Id] = customer;\n    }\n\n    public void Delete(Guid id)\n    {\n        _customers.Remove(id);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Structured.Scanning/Services/ICustomerService.cs",
    "content": "﻿using DotnetDocsShow.Structured.Scanning.Models;\n\nnamespace DotnetDocsShow.Structured.Scanning.Services;\n\npublic interface ICustomerService\n{\n    void Create(Customer? customer);\n\n    Customer? GetById(Guid id);\n\n    List<Customer> GetAll();\n\n    void Update(Customer customer);\n\n    void Delete(Guid id);\n}\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Integration/BroadCustomerEndpointsTests.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Net.Http.Json;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing DotnetDocsShow.MinimalApiTests.Structured.Models;\nusing FluentAssertions;\nusing Microsoft.Extensions.DependencyInjection;\nusing NSubstitute;\nusing Xunit;\n\nnamespace DotnetDocsShow.Tests.Integration;\n\npublic class BroadCustomerEndpointsTests\n{\n    [Fact]\n    public async Task GetCustomerById_ReturnCustomer_WhenCustomerExists()\n    {\n        //Arrange\n        var id = Guid.NewGuid();\n        var customer = new Customer{ Id = id, FullName = \"Nick Chapsas\"};\n\n        using var app = new TestApplicationFactory();\n\n        var httpClient = app.CreateClient();\n        await httpClient.PostAsJsonAsync(\"/customers\", customer);\n\n        //Act\n        var response = await httpClient.GetAsync($\"/customers/{id}\");\n        var responseText = await response.Content.ReadAsStringAsync();\n        var customerResult = JsonSerializer.Deserialize<Customer>(responseText);\n\n        //Assert\n        response.StatusCode.Should().Be(HttpStatusCode.OK);\n        customerResult.Should().BeEquivalentTo(customer);\n    }\n\n    [Fact]\n    public async Task GetCustomerById_ReturnNotFound_WhenCustomerDoesNotExists()\n    {\n        //Arrange\n        using var app = new TestApplicationFactory();\n\n        var guid = Guid.NewGuid();\n        var httpClient = app.CreateClient();\n\n        //Act\n        var response = await httpClient.GetAsync($\"/customers/{guid}\");\n\n        //Assert\n        response.StatusCode.Should().Be(HttpStatusCode.NotFound);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Integration/DotnetDocsShow.Tests.Integration.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net6.0</TargetFramework>\n        <Nullable>enable</Nullable>\n        <IsPackable>false</IsPackable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"FluentAssertions\" Version=\"6.1.0\" />\n        <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Testing\" Version=\"6.0.0-rc.2.21480.10\" />\n        <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"16.11.0\" />\n        <PackageReference Include=\"NSubstitute\" Version=\"4.2.2\" />\n        <PackageReference Include=\"xunit\" Version=\"2.4.1\" />\n        <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.4.3\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n        <PackageReference Include=\"coverlet.collector\" Version=\"3.1.0\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\DotnetDocsShow.MinimalApiTests.Structured\\DotnetDocsShow.MinimalApiTests.Structured.csproj\" />\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Integration/NarrowCustomerEndpointsTests.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing DotnetDocsShow.MinimalApiTests.Structured.Models;\nusing DotnetDocsShow.MinimalApiTests.Structured.Services;\nusing FluentAssertions;\nusing Microsoft.Extensions.DependencyInjection;\nusing NSubstitute;\nusing Xunit;\n\nnamespace DotnetDocsShow.Tests.Integration;\n\npublic class NarrowCustomerEndpointsTests\n{\n    private readonly ICustomerService _customerService =\n        Substitute.For<ICustomerService>();\n\n    [Fact]\n    public async Task GetCustomerById_ReturnCustomer_WhenCustomerExists()\n    {\n        //Arrange\n        var id = Guid.NewGuid();\n        var customer = new Customer{ Id = id, FullName = \"Nick Chapsas\"};\n        _customerService.GetById(Arg.Is(id)).Returns(customer);\n\n        using var app = new TestApplicationFactory(x =>\n        {\n            x.AddSingleton(_customerService);\n        });\n\n        var httpClient = app.CreateClient();\n\n        //Act\n        var response = await httpClient.GetAsync($\"/customers/{id}\");\n        var responseText = await response.Content.ReadAsStringAsync();\n        var customerResult = JsonSerializer.Deserialize<Customer>(responseText);\n\n        //Assert\n        response.StatusCode.Should().Be(HttpStatusCode.OK);\n        customerResult.Should().BeEquivalentTo(customer);\n    }\n\n    [Fact]\n    public async Task GetCustomerById_ReturnNotFound_WhenCustomerDoesNotExists()\n    {\n        //Arrange\n        _customerService.GetById(Arg.Any<Guid>()).Returns((Customer?)null);\n\n        using var app = new TestApplicationFactory(x =>\n        {\n            x.AddSingleton(_customerService);\n        });\n\n        var guid = Guid.NewGuid();\n        var httpClient = app.CreateClient();\n\n        //Act\n        var response = await httpClient.GetAsync($\"/customers/{guid}\");\n\n        //Assert\n        response.StatusCode.Should().Be(HttpStatusCode.NotFound);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Integration/TestApplicationFactory.cs",
    "content": "﻿using System;\nusing Microsoft.AspNetCore.Mvc.Testing;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace DotnetDocsShow.Tests.Integration;\n\ninternal class TestApplicationFactory : WebApplicationFactory<Program>\n{\n    private readonly Action<IServiceCollection>? _serviceOverride;\n\n    public TestApplicationFactory(Action<IServiceCollection>? serviceOverride = null)\n    {\n        _serviceOverride = serviceOverride;\n    }\n\n    protected override IHost CreateHost(IHostBuilder builder)\n    {\n        if (_serviceOverride is not null)\n        {\n            builder.ConfigureServices(_serviceOverride);\n        }\n\n        return base.CreateHost(builder);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Unit/CustomerEndpointDefinitionTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing DotnetDocsShow.MinimalApiTests.Structured.EndpointDefinitions;\nusing DotnetDocsShow.MinimalApiTests.Structured.Models;\nusing DotnetDocsShow.MinimalApiTests.Structured.Services;\nusing FluentAssertions;\nusing NSubstitute;\nusing Xunit;\n\nnamespace DotnetDocsShow.Tests.Unit;\n\npublic class CustomerEndpointDefinitionTests\n{\n    private readonly ICustomerService _customerService =\n        Substitute.For<ICustomerService>();\n\n    private readonly CustomerEndpointDefinition _sut = new();\n\n    [Fact]\n    public void GetAllCustomers_ReturnEmptyList_WhenNoCustomersExist()\n    {\n        //Arrange\n        _customerService.GetAll().Returns(new List<Customer>());\n\n        //Act\n        var result = _sut.GetAllCustomers(_customerService);\n\n        //Assert\n        result.Should().BeEmpty();\n    }\n\n    [Fact]\n    public void GetAllCustomers_ReturnsCustomer_WhenCustomerExists()\n    {\n        //Arrange\n        var id = Guid.NewGuid();\n        var customer = new Customer { Id = id, FullName = \"Nick Chapsas\" };\n        _customerService.GetAll().Returns(new List<Customer> { customer });\n\n        //Act\n        var result = _sut.GetAllCustomers(_customerService);\n\n        //Assert\n        result.Should().ContainSingle(x => x.Id == id && x.FullName == \"Nick Chapsas\");\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Unit/DotnetDocsShow.Tests.Unit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net6.0</TargetFramework>\n        <Nullable>enable</Nullable>\n\n        <IsPackable>false</IsPackable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"FluentAssertions\" Version=\"6.2.0\" />\n        <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"16.11.0\" />\n        <PackageReference Include=\"NSubstitute\" Version=\"4.2.2\" />\n        <PackageReference Include=\"xunit\" Version=\"2.4.1\" />\n        <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.4.3\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n        <PackageReference Include=\"coverlet.collector\" Version=\"3.1.0\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\DotnetDocsShow.MinimalApiTests.Structured\\DotnetDocsShow.MinimalApiTests.Structured.csproj\" />\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Tests.Unit/ResultExtensions.cs",
    "content": "﻿using System;\nusing Microsoft.AspNetCore.Http;\n\nnamespace DotnetDocsShow.Tests.Unit;\n\npublic static class ResultExtensions\n{\n    public static T? GetOkObjectResultValue<T>(this IResult result)\n    {\n        return (T?)Type.GetType(\"Microsoft.AspNetCore.Http.Result.OkObjectResult, Microsoft.AspNetCore.Http.Results\")?\n            .GetProperty(\"Value\",\n                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public)?\n            .GetValue(result);\n    }\n\n    public static int? GetOkObjectResultStatusCode(this IResult result)\n    {\n        return (int?)Type.GetType(\"Microsoft.AspNetCore.Http.Result.OkObjectResult, Microsoft.AspNetCore.Http.Results\")?\n            .GetProperty(\"StatusCode\",\n                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public)?\n            .GetValue(result);\n    }\n\n    public static int? GetNotFoundResultStatusCode(this IResult result)\n    {\n        return (int?)Type.GetType(\"Microsoft.AspNetCore.Http.Result.NotFoundObjectResult, Microsoft.AspNetCore.Http.Results\")?\n            .GetProperty(\"StatusCode\",\n                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public)?\n            .GetValue(result);\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Weather.MinimalApi/DotnetDocsShow.Weather.MinimalApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net6.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"6.1.5\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "DotnetDocsShow.Weather.MinimalApi/Program.cs",
    "content": "﻿using DotnetDocsShow.Weather.MinimalApi;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Add services to the container.\n// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\nbuilder.Services.AddAuthorization();\n\nvar app = builder.Build();\n\n// Configure the HTTP request pipeline.\nif (app.Environment.IsDevelopment())\n{\n    app.UseSwagger();\n    app.UseSwaggerUI();\n}\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.MapWeatherEndpoints();\n\napp.Run(\"https://localhost:1337\");\n"
  },
  {
    "path": "DotnetDocsShow.Weather.MinimalApi/WeatherEndpoints.cs",
    "content": "﻿namespace DotnetDocsShow.Weather.MinimalApi;\n\npublic static class WeatherEndpoints\n{\n    private static Random Random = new(489);\n    private static string[] Summaries = {\n        \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n    };\n\n    public static void MapWeatherEndpoints(this WebApplication app)\n    {\n        app.MapGet(\"weatherforecast\", () =>\n        {\n            return Enumerable.Range(1, 5).Select(index => new WeatherForecast\n                {\n                    Date = DateTime.Now.AddDays(index),\n                    TemperatureC = Random.Next(-20, 55),\n                    Summary = Summaries[Random.Next(Summaries.Length)]\n                })\n                .ToArray();\n        })\n            .Produces(200, typeof(IEnumerable<WeatherForecast>))\n            .AllowAnonymous();\n    }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Weather.MinimalApi/WeatherForecast.cs",
    "content": "namespace DotnetDocsShow.Weather.MinimalApi;\n\npublic class WeatherForecast\n{\n    public DateTime Date { get; set; }\n\n    public int TemperatureC { get; set; }\n\n    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n\n    public string? Summary { get; set; }\n}\n"
  },
  {
    "path": "DotnetDocsShow.Weather.MinimalApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "DotnetDocsShow.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"1. Comparision\", \"1. Comparision\", \"{6FB66046-57C1-4669-84E1-0905DADC000E}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"4. Structuring\", \"4. Structuring\", \"{8618805B-A0E5-4B0A-B52D-FF5429D814E2}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"5. Testing\", \"5. Testing\", \"{1E5E6DC2-39AE-4B52-83A7-46B28FEF72C3}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"2. Performance\", \"2. Performance\", \"{A18A5368-4F83-428C-ABA5-838FE467A581}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.NewWebApi\", \"DotnetDocsShow.NewWebApi\\DotnetDocsShow.NewWebApi.csproj\", \"{6CA5CC96-0678-4723-B5B3-E2464516C277}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.PerformanceTests\", \"DotnetDocsShow.PerformanceTests\\DotnetDocsShow.PerformanceTests.csproj\", \"{71788840-6B85-42A5-9D52-D51A802A21BE}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.OldWebApi\", \"DotnetDocsShow.OldWebApi\\DotnetDocsShow.OldWebApi.csproj\", \"{5EB40414-02BE-44A5-A14C-E619914A0F4A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Weather.MinimalApi\", \"DotnetDocsShow.Weather.MinimalApi\\DotnetDocsShow.Weather.MinimalApi.csproj\", \"{AD793B6C-DF05-458E-854B-ECFCAF7167AD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Tests.Unit\", \"DotnetDocsShow.Tests.Unit\\DotnetDocsShow.Tests.Unit.csproj\", \"{96598D5F-199D-45E7-9F80-98FD10DCD24A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Tests.Integration\", \"DotnetDocsShow.Tests.Integration\\DotnetDocsShow.Tests.Integration.csproj\", \"{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.MinimalApiTests.Structured\", \"DotnetDocsShow.MinimalApiTests.Structured\\DotnetDocsShow.MinimalApiTests.Structured.csproj\", \"{E6AFFD49-C560-4947-8076-48E3F87AACAC}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Structured.Scanning\", \"DotnetDocsShow.Structured.Scanning\\DotnetDocsShow.Structured.Scanning.csproj\", \"{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Structured.Extensions\", \"DotnetDocsShow.Structured.Extensions\\DotnetDocsShow.Structured.Extensions.csproj\", \"{020FC895-5E41-41A6-9C10-E2BCEBE40842}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Structured.Mediator\", \"DotnetDocsShow.Structured.Mediator\\DotnetDocsShow.Structured.Mediator.csproj\", \"{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"0. Intro\", \"0. Intro\", \"{8975828E-1794-41B6-8F82-41F70F52C270}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"3. Extensions\", \"3. Extensions\", \"{6BD6DACA-80E0-4683-A6B3-649D79F8994C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Extensions.Validation\", \"DotnetDocsShow.Extensions.Validation\\DotnetDocsShow.Extensions.Validation.csproj\", \"{12E1D11E-6E0E-4F40-91BB-996E71CC15C3}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DotnetDocsShow.Intro.MinimalApi\", \"DotnetDocsShow.Intro.MinimalApi\\DotnetDocsShow.Intro.MinimalApi.csproj\", \"{A3ECA132-FE31-46DF-8715-285B41409A1D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{6CA5CC96-0678-4723-B5B3-E2464516C277} = {6FB66046-57C1-4669-84E1-0905DADC000E}\n\t\t{71788840-6B85-42A5-9D52-D51A802A21BE} = {A18A5368-4F83-428C-ABA5-838FE467A581}\n\t\t{5EB40414-02BE-44A5-A14C-E619914A0F4A} = {6FB66046-57C1-4669-84E1-0905DADC000E}\n\t\t{AD793B6C-DF05-458E-854B-ECFCAF7167AD} = {6FB66046-57C1-4669-84E1-0905DADC000E}\n\t\t{96598D5F-199D-45E7-9F80-98FD10DCD24A} = {1E5E6DC2-39AE-4B52-83A7-46B28FEF72C3}\n\t\t{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F} = {1E5E6DC2-39AE-4B52-83A7-46B28FEF72C3}\n\t\t{E6AFFD49-C560-4947-8076-48E3F87AACAC} = {1E5E6DC2-39AE-4B52-83A7-46B28FEF72C3}\n\t\t{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F} = {8618805B-A0E5-4B0A-B52D-FF5429D814E2}\n\t\t{020FC895-5E41-41A6-9C10-E2BCEBE40842} = {8618805B-A0E5-4B0A-B52D-FF5429D814E2}\n\t\t{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84} = {8618805B-A0E5-4B0A-B52D-FF5429D814E2}\n\t\t{12E1D11E-6E0E-4F40-91BB-996E71CC15C3} = {6BD6DACA-80E0-4683-A6B3-649D79F8994C}\n\t\t{A3ECA132-FE31-46DF-8715-285B41409A1D} = {8975828E-1794-41B6-8F82-41F70F52C270}\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{6CA5CC96-0678-4723-B5B3-E2464516C277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6CA5CC96-0678-4723-B5B3-E2464516C277}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6CA5CC96-0678-4723-B5B3-E2464516C277}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6CA5CC96-0678-4723-B5B3-E2464516C277}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{71788840-6B85-42A5-9D52-D51A802A21BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{71788840-6B85-42A5-9D52-D51A802A21BE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{71788840-6B85-42A5-9D52-D51A802A21BE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{71788840-6B85-42A5-9D52-D51A802A21BE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5EB40414-02BE-44A5-A14C-E619914A0F4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5EB40414-02BE-44A5-A14C-E619914A0F4A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5EB40414-02BE-44A5-A14C-E619914A0F4A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5EB40414-02BE-44A5-A14C-E619914A0F4A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AD793B6C-DF05-458E-854B-ECFCAF7167AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AD793B6C-DF05-458E-854B-ECFCAF7167AD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AD793B6C-DF05-458E-854B-ECFCAF7167AD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AD793B6C-DF05-458E-854B-ECFCAF7167AD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{96598D5F-199D-45E7-9F80-98FD10DCD24A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{96598D5F-199D-45E7-9F80-98FD10DCD24A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{96598D5F-199D-45E7-9F80-98FD10DCD24A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{96598D5F-199D-45E7-9F80-98FD10DCD24A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0D8831BD-6C91-49ED-9BE7-AEA7A6DA821F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E6AFFD49-C560-4947-8076-48E3F87AACAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E6AFFD49-C560-4947-8076-48E3F87AACAC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E6AFFD49-C560-4947-8076-48E3F87AACAC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E6AFFD49-C560-4947-8076-48E3F87AACAC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D7F4582E-2A51-4BCA-A4D6-A11B92EDAA2F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{020FC895-5E41-41A6-9C10-E2BCEBE40842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{020FC895-5E41-41A6-9C10-E2BCEBE40842}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{020FC895-5E41-41A6-9C10-E2BCEBE40842}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{020FC895-5E41-41A6-9C10-E2BCEBE40842}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DCFF64BC-6B91-4121-BB4B-0A34AD3A6C84}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{12E1D11E-6E0E-4F40-91BB-996E71CC15C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{12E1D11E-6E0E-4F40-91BB-996E71CC15C3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{12E1D11E-6E0E-4F40-91BB-996E71CC15C3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{12E1D11E-6E0E-4F40-91BB-996E71CC15C3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A3ECA132-FE31-46DF-8715-285B41409A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A3ECA132-FE31-46DF-8715-285B41409A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A3ECA132-FE31-46DF-8715-285B41409A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A3ECA132-FE31-46DF-8715-285B41409A1D}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\nEndGlobal\n"
  }
]