File: Macros\SwitchMacro.cs
Web Access
Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Orchestrator.RunnableProjects\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj (Microsoft.TemplateEngine.Orchestrator.RunnableProjects)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.Extensions.Logging;
using Microsoft.TemplateEngine.Abstractions;
using Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Abstractions;

namespace Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros
{
    internal class SwitchMacro : BaseGeneratedSymbolMacro<SwitchMacroConfig>
    {
        public override Guid Id { get; } = new Guid("B57D64E0-9B4F-4ABE-9366-711170FD5294");

        public override string Type => "switch";

        public override void Evaluate(IEngineEnvironmentSettings environmentSettings, IVariableCollection variableCollection, SwitchMacroConfig config)
        {
            string result = string.Empty;   // default if no condition assigns a value

            foreach ((string? condition, string value) in config.Cases)
            {
                if (string.IsNullOrEmpty(condition))
                {
                    // no condition, this is the default.
                    result = value;
                    break;
                }

                if (config.Evaluator(environmentSettings.Host.Logger, condition!, variableCollection))
                {
                    result = value;
                    break;
                }
            }
            variableCollection[config.VariableName] = result;
            environmentSettings.Host.Logger.LogDebug("[{macro}]: Assigned variable '{var}' to '{value}'.", nameof(SwitchMacro), config.VariableName, result);
        }

        public override SwitchMacroConfig CreateConfig(IEngineEnvironmentSettings environmentSettings, IGeneratedSymbolConfig deferredConfig) => new(this, deferredConfig);
    }
}