TeamCity.CSharpInteractive/SettingCommandRunner.cs (24 lines of code) (raw):

// ReSharper disable ClassNeverInstantiated.Global namespace TeamCity.CSharpInteractive; internal class SettingCommandRunner<TOption> : ICommandRunner where TOption: struct, Enum { private readonly ILog<SettingCommandRunner<TOption>> _log; private readonly ISettingSetter<TOption> _settingSetter; public SettingCommandRunner( ILog<SettingCommandRunner<TOption>> log, ISettingSetter<TOption> settingSetter) { _log = log; _settingSetter = settingSetter; } public CommandResult TryRun(ICommand command) { if (command is not SettingCommand<TOption> settingCommand) { return new CommandResult(command, default); } var previousValue = _settingSetter.SetSetting(settingCommand.Value); _log.Trace(() => { return new[] {new Text($"Change the {typeof(TOption).Name} from {previousValue} to {settingCommand.Value}.")}; }); return new CommandResult(command, true); } }