/// <summary>
        /// Initializes a new instance of the Argument class.
        /// </summary>
        /// <param name="name">The name of the argument.</param>
        /// <param name="parse">A custom argument parser.</param>
        /// <param name="isDefault"><see langword="true"/> to use the <paramref name="parse"/> result as default value.</param>
        /// <param name="description">The description of the argument, shown in help.</param>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="parse"/> is null.</exception>
        public Argument(
            string?name,
            ParseArgument <T> parse,
            bool isDefault     = false,
            string?description = null) : this(name, description)
        {
            if (parse is null)
            {
                throw new ArgumentNullException(nameof(parse));
            }

            if (isDefault)
            {
                SetDefaultValueFactory(argumentResult => parse(argumentResult));
            }

            ConvertArguments = (ArgumentResult argumentResult, out object?value) =>
            {
                var result = parse(argumentResult);

                if (string.IsNullOrEmpty(argumentResult.ErrorMessage))
                {
                    value = result;
                    return(true);
                }
                else
                {
                    value = default(T) !;
                    return(false);
                }
            };

            _hasCustomParser = true;
        }
Exemple #2
0
 public static ArgumentBuilder <T> ParseWith <T>(this ArgumentBuilder <T> builder, ParseArgument <T> parser, bool useAsDefaultFactory = false)
 {
     (builder ?? throw Exceptions.BuildArgumentNull(nameof(builder)))
     .Parser = parser;
     builder.UseParserAsDefaultFactory = useAsDefaultFactory;
     return(builder);
 }
Exemple #3
0
        public Argument(ParseArgument <T> parse, bool isDefault = false) : this()
        {
            if (parse == null)
            {
                throw new ArgumentNullException(nameof(parse));
            }

            if (isDefault)
            {
                SetDefaultValueFactory(argumentResult => parse(argumentResult));
            }

            ConvertArguments = (ArgumentResult argumentResult, out object value) =>
            {
                var result = parse(argumentResult);

                if (string.IsNullOrEmpty(argumentResult.ErrorMessage))
                {
                    value = result;
                    return(true);
                }
                else
                {
                    value = default(T);
                    return(false);
                }
            };
        }
Exemple #4
0
 public Option(
     string alias,
     ParseArgument <T> parseArgument,
     bool isDefault     = false,
     string?description = null
     )
     : base(
         new[] { alias },
         description,
        public Option(
            string[] aliases,
            ParseArgument <T> parseArgument,
            bool isDefault     = false,
            string?description = null) : base(aliases, description)
        {
            if (parseArgument is null)
            {
                throw new ArgumentNullException(nameof(parseArgument));
            }

            Argument = new Argument <T>(parseArgument, isDefault);
        }
Exemple #6
0
 /// <summary>
 /// Initializes a new instance of the Argument class.
 /// </summary>
 /// <param name="parse">A custom argument parser.</param>
 /// <param name="isDefault"><see langword="true"/> to use the <paramref name="parse"/> result as default value.</param>
 public Argument(ParseArgument <T> parse, bool isDefault = false) : this(null, parse, isDefault)
 {
 }
Exemple #7
0
 /// <inheritdoc/>
 public Option(
     string name,
     ParseArgument <T> parseArgument,
     bool isDefault     = false,
     string?description = null)
     : base(name, description,
Exemple #8
0
 /// <summary>
 /// Creates a new phone number		
 /// </summary>
 public PhoneNumber(object DataCell, ParseArgument ParseAs, string DefaultUSAreaCode = null)
 {
     if (!StringFunctions.IsNullOrWhiteSpace(DefaultUSAreaCode))
         this.DefaultUSAreaCode = DefaultUSAreaCode;
     _strSource = "";
     _intCountryCode = -1;
     _intAreaCode = -1;
     _intNumber = -1;
     _intExtension = null;
     _strCountryName = "";
     _strAreaDescription = "";
     if(DataCell != null)
     {
         if(!Convert.IsDBNull(DataCell))
         {
             _strSource = DataCell.ToString();
             if(StringFunctions.IsNumeric(_strSource))
                 ParseNumber(Convert.ToInt64(_strSource),ParseAs);
             else
                 ParseNumber(_strSource,ParseAs);
         }
     }
 }
Exemple #9
0
 /// <summary>
 /// Creates a new phone number		
 /// </summary>
 public PhoneNumber(string Number, ParseArgument ParseAs, string DefaultUSAreaCode = null)
 {
     if (!StringFunctions.IsNullOrWhiteSpace(DefaultUSAreaCode))
         this.DefaultUSAreaCode = DefaultUSAreaCode;
     _strSource = Number;
     _intCountryCode = -1;
     _intAreaCode = -1;
     _intNumber = -1;
     _intExtension = null;
     _strCountryName = "";
     _strAreaDescription = "";
     if(StringFunctions.IsNumeric(_strSource))
         ParseNumber(Convert.ToInt64(_strSource),ParseAs);
     else if (_strSource != null)
         ParseNumber(_strSource,ParseAs);
 }
Exemple #10
0
 /// <summary>
 /// Creates a new phone number		
 /// </summary>
 public PhoneNumber(Int64 Number, ParseArgument ParseAs, string DefaultUSAreaCode = null)
 {
     if (!StringFunctions.IsNullOrWhiteSpace(DefaultUSAreaCode))
         this.DefaultUSAreaCode = DefaultUSAreaCode;
     _strSource = Number.ToString();
     _intCountryCode = -1;
     _intAreaCode = -1;
     _intNumber = -1;
     _intExtension = null;
     _strCountryName = "";
     _strAreaDescription = "";
     ParseNumber(Number,ParseAs);
 }
Exemple #11
0
        /// <summary>
        /// Creates a new phone number		
        /// </summary>
        public PhoneNumber(string Number, string Extension, ParseArgument ParseAs, string DefaultUSAreaCode = null)
        {
            if (!StringFunctions.IsNullOrWhiteSpace(DefaultUSAreaCode))
                this.DefaultUSAreaCode = DefaultUSAreaCode;
            _strSource = Number.ToString();
            _intCountryCode = -1;
            _intAreaCode = -1;
            _intNumber = -1;
            _intExtension = null;
            _strCountryName = "";
            _strAreaDescription = "";

            if(Number == null) _intNumber = -1;
            else if(Number == "") _intNumber = -1;
            else
            {
                if(StringFunctions.IsNumeric(Number))
                    ParseNumber(Convert.ToInt64(Number),ParseAs);
                else
                    ParseNumber(Number,ParseAs);
            }

            int? intExtension;
            if (Extension == null) intExtension = null;
            else if (Extension == "") intExtension = null;
            else intExtension = Convert.ToInt32(StringFunctions.ForceNumeric(Extension));

            if (intExtension.HasValue)
                _intExtension = intExtension;
        }
Exemple #12
0
        private void ParseNumber(string Number, ParseArgument ParseAs)
        {
            _blnFlaggedInvalid = false;
            _enuParseAs = ParseAs;

            switch(ParseAs)
            {
                case ParseArgument.NANP:
                    if (StringFunctions.ForceInteger(Number).StartsWith("0"))
                        _blnFlaggedInvalid = true; //NANP numbers and dial strings don't start with zero
                    ParseNANPNumber(CleanNumber(Number));
                    break;
                default:
                    ParseNumber(CleanNumber(Number));
                    break;
            }
        }
Exemple #13
0
        private void ParseNumber(Int64 Number, ParseArgument ParseAs)
        {
            _blnFlaggedInvalid = false;
            _enuParseAs = ParseAs;

            switch(ParseAs)
            {
                case ParseArgument.NANP:
                    ParseNANPNumber(Number);
                    break;
                default:
                    ParseNumber(Number);
                    break;
            }
        }
Exemple #14
0
 public ForwardedOption(string alias, ParseArgument <T> parseArgument, string description = null) :
     base(alias, parseArgument, description: description)
 {
 }
Exemple #15
0
        /// <summary>
        /// Build the root command.
        /// </summary>
        /// <returns>A configured root command.</returns>
        public Command Build()
        {
            var command = new RootCommand();

            // Add sub-commands
            foreach (var builder in _builders)
            {
                _logger.LogDebug(TraceMessages.AddingSubCommand, builder.GetType().Name);

                command.AddCommand(builder.Build());
            }

            // Add root level options (available to all sub-commands)
            var verboseAliases = new string[] { OptionsResources.VerboseOptionShort, OptionsResources.VerboseOptionLong };
            var verboseOption  = new Option <bool>(verboseAliases, OptionsResources.VerboseOptionDescription);

            command.AddGlobalOption(verboseOption);

            var verboseLevelOption = new Option <char>(OptionsResources.VerboseLevelOptionLong, () => '-', OptionsResources.VerboseLevelOptionDescription);

            command.AddGlobalOption(verboseLevelOption);

            var noAbortOption = new Option <bool>(OptionsResources.NoAbortOptionLong, OptionsResources.NoAbortOptionDescription);

            command.AddGlobalOption(noAbortOption);

            var abortStageOption = new Option <Stages[]>(OptionsResources.AbortStageOptionLong, OptionsResources.AbortStageOptionDescription);

            command.AddGlobalOption(abortStageOption);

            var findPathAliases = new string[] { OptionsResources.FindPathsOptionShort, OptionsResources.FindPathsOptionLong };
            var findPathOption  = new Option <DirectoryInfo[]>(findPathAliases, OptionsResources.FindPathsOptionDescription);

            command.AddGlobalOption(findPathOption);

            var findPatternAliases = new string[] { OptionsResources.FindPatternOptionShort, OptionsResources.FindPatternOptionLong };
            var findPatternOption  = new Option <string>(findPatternAliases, OptionsResources.FindPatternOptionDescription);

            command.AddGlobalOption(findPatternOption);

            var parseFunc       = new ParseArgument <Dictionary <string, string> >(argResult => argResult.Tokens.Select(t => t.Value.Split('=')).ToDictionary(v => v[0], v => v.Length > 1 ? v[1] : ""));
            var argumentAliases = new string[] { OptionsResources.ArgumentsOptionShort, OptionsResources.ArgumentsOptionLong };
            var argumentOption  = new Option <Dictionary <string, string> >(argumentAliases, parseFunc, description: OptionsResources.ArgumentsOptionDescription);

            command.AddGlobalOption(argumentOption);

            var argumentDelimiterOption = new Option <string>(OptionsResources.ArgumentDelimiterOptionLong, OptionsResources.ArgumentDelimiterOptionDescription);

            command.AddGlobalOption(argumentDelimiterOption);

            var workingDirAliases = new string[] { OptionsResources.WorkingPathOptionShort, OptionsResources.WorkingPathOptionLong };
            var workingDirOption  = new Option <DirectoryInfo>(workingDirAliases, OptionsResources.WorkingPathOptionDescription);

            command.AddGlobalOption(workingDirOption);

            var stateDirAliases = new string[] { OptionsResources.StatePathOptionShort, OptionsResources.StatePathOptionLong };
            var stateDirOption  = new Option <string>(stateDirAliases, OptionsResources.StatePathOptionDescription);

            command.AddGlobalOption(stateDirOption);

            var saveStateOption = new Option <bool>(OptionsResources.SaveStageRunnerStateOptionLong, OptionsResources.SaveStageRunnerStateOptionDescription);

            command.AddGlobalOption(saveStateOption);

            var saveStageStateOption = new Option <bool>(OptionsResources.SaveStageStateOptionLong, OptionsResources.SaveStageStateOptionDescription);

            command.AddGlobalOption(saveStageStateOption);

            var azureTargetOption = new Option <AzureIntegrationServicesTarget>(OptionsResources.AzureTargetOptionLong, OptionsResources.AzureTargetOptionDescription);

            command.AddGlobalOption(azureTargetOption);

            var subscriptionIdOption = new Option <string>(OptionsResources.AzureSubscriptionIdOptionLong, OptionsResources.AzureSubscriptionIdOptionDescription);

            command.AddGlobalOption(subscriptionIdOption);

            var primaryRegionOption = new Option <string>(OptionsResources.AzurePrimaryRegionOptionLong, OptionsResources.AzurePrimaryRegionOptionDescription);

            command.AddGlobalOption(primaryRegionOption);

            var secondaryRegionOption = new Option <string>(OptionsResources.AzureSecondaryRegionOptionLong, OptionsResources.AzureSecondaryRegionOptionDescription);

            command.AddGlobalOption(secondaryRegionOption);

            var deploymentEnvAliases = new string[] { OptionsResources.DeploymentEnvOptionShort, OptionsResources.DeploymentEnvOptionLong };
            var deploymentEnvOption  = new Option <string>(deploymentEnvAliases, OptionsResources.DeploymentEnvOptionDescription);

            command.AddGlobalOption(deploymentEnvOption);

            var uniqueDeploymentIdOption = new Option <string>(OptionsResources.UniqueDeploymentIdOptionLong, string.Format(CultureInfo.CurrentCulture, OptionsResources.UniqueDeploymentIdOptionDescription, AppOptionsService.UniqueDeploymentIdLengthLimit));

            command.AddGlobalOption(uniqueDeploymentIdOption);

            // Set handler
            command.Handler = CommandHandler.Create(async() =>
            {
                _logger.LogError(ErrorMessages.SpecifyVerb, OptionsResources.AssessVerb, OptionsResources.MigrateVerb, OptionsResources.ConvertVerb, OptionsResources.VerifyVerb);

                return(await Task.FromResult <int>(ReturnCodeConstants.ArgsError).ConfigureAwait(false));
            });

            return(command);
        }