Add FunctionValidator and validate_with DSL