namespace Spectre.Console.Cli;
///
/// Base class for a command.
///
/// The settings type.
///
public abstract class Command : ICommand
where TSettings : CommandSettings
{
///
/// Validates the specified settings and remaining arguments.
///
/// The command context.
/// The settings.
/// The validation result.
public virtual ValidationResult Validate([NotNull] CommandContext context, [NotNull] TSettings settings)
{
return ValidationResult.Success();
}
///
/// Executes the command.
///
/// The command context.
/// The settings.
/// An integer indicating whether or not the command executed successfully.
public abstract int Execute([NotNull] CommandContext context, [NotNull] TSettings settings);
///
ValidationResult ICommand.Validate(CommandContext context, CommandSettings settings)
{
return Validate(context, (TSettings)settings);
}
///
Task ICommand.Execute(CommandContext context, CommandSettings settings)
{
Debug.Assert(settings is TSettings, "Command settings is of unexpected type.");
return Task.FromResult(Execute(context, (TSettings)settings));
}
///
Task ICommand.Execute(CommandContext context, TSettings settings)
{
return Task.FromResult(Execute(context, settings));
}
}