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}"); } }
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); }