| File: Commands\create\TemplateOption.cs | Web Access |
| Project: src\sdk\src\Cli\Microsoft.TemplateEngine.Cli\Microsoft.TemplateEngine.Cli.csproj (Microsoft.TemplateEngine.Cli) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.CommandLine; namespace Microsoft.TemplateEngine.Cli.Commands { internal class TemplateOption : IEquatable<TemplateOption> { private Option _option; internal TemplateOption( CliTemplateParameter parameter, IReadOnlySet<string> aliases) { TemplateParameter = parameter; Aliases = aliases; _option = TemplateParameter.GetOption(Aliases); } internal CliTemplateParameter TemplateParameter { get; private set; } internal IReadOnlySet<string> Aliases { get; private set; } internal Option Option => _option; public bool Equals(TemplateOption? other) { if (other == null) { return false; } if (ReferenceEquals(this, other)) { return true; } if (!string.Equals(TemplateParameter.Name, other.TemplateParameter.Name, StringComparison.Ordinal)) { return false; } if (TemplateParameter.Type != other.TemplateParameter.Type) { return false; } if (Aliases.Count != other.Aliases.Count) { return false; } foreach (string alias in other.Aliases) { if (!Aliases.Contains(alias)) { return false; } } return true; } public override bool Equals(object? obj) => Equals(obj as TemplateOption); public override int GetHashCode() { return new { a = TemplateParameter.Name, b = TemplateParameter.Type, c = Aliases.Aggregate(0, (sum, next) => sum ^ next.GetHashCode()) }.GetHashCode(); } internal void MergeChoices(ChoiceTemplateParameter choiceParam) { if (TemplateParameter is not ChoiceTemplateParameter currentChoiceParam) { return; } if (TemplateParameter is CombinedChoiceTemplateParameter combinedParam) { combinedParam.MergeChoices(choiceParam); } else { var combinedChoice = new CombinedChoiceTemplateParameter(currentChoiceParam); combinedChoice.MergeChoices(choiceParam); TemplateParameter = combinedChoice; } _option = TemplateParameter.GetOption(Aliases); } } }