Пример #1
0
        public JmesPathFunctionExpression(IFunctionRepository repository, string name, params JmesPathExpression[] expressions)
        {
            if (!repository.Contains(name))
            {
                throw new Exception($"Error: unknown-function, no function named {name} has been registered.");
            }

            function_ = repository[name];

            var variadic = function_.Variadic;
            var expected = function_.MinArgumentCount;
            var actual   = expressions?.Length;

            if (actual < expected || (!variadic && actual > expected))
            {
                var more   = variadic ? "or more " : "";
                var only   = variadic ? "only " : "";
                var report = actual == 0 ? "none" : $"{only}{actual}";
                var plural = expected > 1 ? "s" : "";

                throw new Exception($"Error: invalid-arity, the function {name} expects {expected} argument{plural} {more}but {report} were supplied.");
            }

            name_        = name;
            expressions_ = expressions;
        }
 public static void ValidatePositionalArgument(this JmesPathFunction jmesPathFunction, JmesPathFunctionArgument[] args, int pos, params JTokenType[] types)
 {
     if (!types.Any(t => t == args[pos].Token.Type))
     {
         throw new Exception($"Error: invalid-type, function {jmesPathFunction.Name} expects argument {pos} to be one of the following: {string.Join("|", types)}");
     }
 }
 public static void ValidateExpectedArgumentCount(this JmesPathFunction jmesPathFunction, int expected, int actual)
 {
     if (expected != actual)
     {
         throw new Exception($"Incorrect number of arguments provided to function {jmesPathFunction.Name}. Expected {expected} but recieved {actual}");
     }
 }
Пример #4
0
 private JmesPathFunctionExpression(string name, JmesPathExpression[] expressions, JmesPathFunction function)
 {
     name_        = name;
     expressions_ = expressions;
     function_    = function;
 }
 public static void ValidatePositionalArgumentIsNumber(this JmesPathFunction jmesPathFunction, JmesPathFunctionArgument[] args, int pos)
 {
     ValidatePositionalArgument(jmesPathFunction, args, pos, JTokenType.Integer, JTokenType.Float);
 }