Example #1
0
        private (bool Success, Exception Error) TryTransformParameters(string argsLine, string[] strArgs, Command cmd, out object[] cmdArgs)
        {
            int requiredParamCount = cmd.Params.Count(o => !o.Optional);

            cmdArgs = Enumerable.Repeat(Type.Missing, cmd.Params.Length).ToArray();

            if (strArgs.Length > 0)
            {
                if (cmd.Params.Length == 1 && cmd.Params[0].Type == typeof(string) && strArgs.Length > 1)
                {
                    cmdArgs[0] = argsLine;
                }
                else
                {
                    if (strArgs.Length < requiredParamCount || strArgs.Length > cmd.Params.Length)
                    {
                        return(false, new ParameterMismatchException(requiredParamCount, cmd.Params.Length, strArgs.Length, cmd));
                    }

                    for (int i = 0; i < strArgs.Length; i++)
                    {
                        var(valueConverted, value) = ValueConverter.TryConvertValue(cmd.Params[i].Type, strArgs[i]);

                        if (!valueConverted)
                        {
                            return(false, new ParameterConversionException(cmd.Params[i].Name, cmd.Params[i].Type));
                        }
                        else
                        {
                            cmdArgs[i] = value;
                        }
                    }
                }
            }
            else if (requiredParamCount > 0)
            {
                return(false, new ParameterMismatchException(requiredParamCount, cmd.Params.Length, 0, cmd));
            }

            return(true, null);
        }