// This file is autogenerated by build/build-validation.js, do not edit
/* istanbul ignore file */
// constant needed for customRule0 to work
const self = {}

'use strict';
var validate = (function() {
  var refVal = [];
  return function validate(data, dataPath, parentData, parentDataProperty, rootData) {
    'use strict';
    var vErrors = null;
    var errors = 0;
    if (rootData === undefined) rootData = data;
    if ((data && typeof data === "object" && !Array.isArray(data))) {
      if (data.bodyLimit === undefined) data.bodyLimit = 1048576;
      if (data.caseSensitive === undefined) data.caseSensitive = true;
      if (data.ignoreTrailingSlash === undefined) data.ignoreTrailingSlash = false;
      if (data.disableRequestLogging === undefined) data.disableRequestLogging = false;
      if (data.maxParamLength === undefined) data.maxParamLength = 100;
      if (data.onProtoPoisoning === undefined) data.onProtoPoisoning = "error";
      if (data.onConstructorPoisoning === undefined) data.onConstructorPoisoning = "ignore";
      if (data.pluginTimeout === undefined) data.pluginTimeout = 10000;
      if (data.requestIdHeader === undefined) data.requestIdHeader = "request-id";
      if (data.requestIdLogLabel === undefined) data.requestIdLogLabel = "reqId";
      if (data.http2SessionTimeout === undefined) data.http2SessionTimeout = 5000;
      var errs__0 = errors;
      var valid1 = true;
      for (var key0 in data) {
        var isAdditional0 = !(false || validate.schema.properties.hasOwnProperty(key0));
        if (isAdditional0) {
          delete data[key0];
        }
      }
      if (valid1) {
        var data1 = data.bodyLimit;
        var errs_1 = errors;
        if ((typeof data1 !== "number" || (data1 % 1) || data1 !== data1)) {
          var dataType1 = typeof data1;
          var coerced1 = undefined;
          if (dataType1 == 'boolean' || data1 === null || (dataType1 == 'string' && data1 && data1 == +data1 && !(data1 % 1))) coerced1 = +data1;
          if (coerced1 === undefined) {
            validate.errors = [{
              keyword: 'type',
              dataPath: (dataPath || '') + '.bodyLimit',
              schemaPath: '#/properties/bodyLimit/type',
              params: {
                type: 'integer'
              },
              message: 'should be integer'
            }];
            return false;
          } else {
            data1 = coerced1;
            data['bodyLimit'] = coerced1;
          }
        }
        var valid1 = errors === errs_1;
        if (valid1) {
          var data1 = data.caseSensitive;
          var errs_1 = errors;
          if (typeof data1 !== "boolean") {
            var dataType1 = typeof data1;
            var coerced1 = undefined;
            if (data1 === 'false' || data1 === 0 || data1 === null) coerced1 = false;
            else if (data1 === 'true' || data1 === 1) coerced1 = true;
            if (coerced1 === undefined) {
              validate.errors = [{
                keyword: 'type',
                dataPath: (dataPath || '') + '.caseSensitive',
                schemaPath: '#/properties/caseSensitive/type',
                params: {
                  type: 'boolean'
                },
                message: 'should be boolean'
              }];
              return false;
            } else {
              data1 = coerced1;
              data['caseSensitive'] = coerced1;
            }
          }
          var valid1 = errors === errs_1;
          if (valid1) {
            var data1 = data.http2;
            if (data1 === undefined) {
              valid1 = true;
            } else {
              var errs_1 = errors;
              if (typeof data1 !== "boolean") {
                var dataType1 = typeof data1;
                var coerced1 = undefined;
                if (data1 === 'false' || data1 === 0 || data1 === null) coerced1 = false;
                else if (data1 === 'true' || data1 === 1) coerced1 = true;
                if (coerced1 === undefined) {
                  validate.errors = [{
                    keyword: 'type',
                    dataPath: (dataPath || '') + '.http2',
                    schemaPath: '#/properties/http2/type',
                    params: {
                      type: 'boolean'
                    },
                    message: 'should be boolean'
                  }];
                  return false;
                } else {
                  data1 = coerced1;
                  data['http2'] = coerced1;
                }
              }
              var valid1 = errors === errs_1;
            }
            if (valid1) {
              var data1 = data.https;
              if (data1 === undefined) {
                valid1 = true;
              } else {
                var errs_1 = errors;
                var errs__1 = errors;
                var valid1 = true;
                var errs_2 = errors;
                var errs__2 = errors;
                var errs_3 = errors;
                var errs__3 = errors,
                  prevValid3 = false,
                  valid3 = false,
                  passingSchemas3 = null;
                var errs_4 = errors;
                if (typeof data1 !== "boolean") {
                  var dataType4 = typeof data1;
                  var coerced4 = undefined;
                  if (data1 === 'false' || data1 === 0 || data1 === null) coerced4 = false;
                  else if (data1 === 'true' || data1 === 1) coerced4 = true;
                  if (coerced4 === undefined) {
                    var err = {};
                    if (vErrors === null) vErrors = [err];
                    else vErrors.push(err);
                    errors++;
                  } else {
                    data1 = coerced4;
                    data['https'] = coerced4;
                  }
                }
                var valid4 = errors === errs_4;
                if (valid4) {
                  valid3 = prevValid3 = true;
                  passingSchemas3 = 0;
                }
                var errs_4 = errors;
                if (data1 !== null) {
                  var dataType4 = typeof data1;
                  var coerced4 = undefined;
                  if (data1 === '' || data1 === 0 || data1 === false) coerced4 = null;
                  if (coerced4 === undefined) {
                    var err = {};
                    if (vErrors === null) vErrors = [err];
                    else vErrors.push(err);
                    errors++;
                  } else {
                    data1 = coerced4;
                    data['https'] = coerced4;
                  }
                }
                var valid4 = errors === errs_4;
                if (valid4 && prevValid3) {
                  valid3 = false;
                  passingSchemas3 = [passingSchemas3, 1];
                } else {
                  if (valid4) {
                    valid3 = prevValid3 = true;
                    passingSchemas3 = 1;
                  }
                  var errs_4 = errors;
                  if ((data1 && typeof data1 === "object" && !Array.isArray(data1))) {
                    if (true) {
                      var errs__4 = errors;
                      var valid5 = true;
                      for (var key4 in data1) {
                        var isAdditional4 = !(false || key4 == 'allowHTTP1');
                        if (isAdditional4) {
                          delete data1[key4];
                        }
                      }
                      if (valid5) {
                        var data2 = data1.allowHTTP1;
                        if (data2 === undefined) {
                          valid5 = false;
                          var err = {};
                          if (vErrors === null) vErrors = [err];
                          else vErrors.push(err);
                          errors++;
                        } else {
                          var errs_5 = errors;
                          if (typeof data2 !== "boolean") {
                            var dataType5 = typeof data2;
                            var coerced5 = undefined;
                            if (data2 === 'false' || data2 === 0 || data2 === null) coerced5 = false;
                            else if (data2 === 'true' || data2 === 1) coerced5 = true;
                            if (coerced5 === undefined) {
                              var err = {};
                              if (vErrors === null) vErrors = [err];
                              else vErrors.push(err);
                              errors++;
                            } else {
                              data2 = coerced5;
                              data1['allowHTTP1'] = coerced5;
                            }
                          }
                          var valid5 = errors === errs_5;
                        }
                      }
                    }
                  } else {
                    var err = {};
                    if (vErrors === null) vErrors = [err];
                    else vErrors.push(err);
                    errors++;
                  }
                  var valid4 = errors === errs_4;
                  if (valid4 && prevValid3) {
                    valid3 = false;
                    passingSchemas3 = [passingSchemas3, 2];
                  } else {
                    if (valid4) {
                      valid3 = prevValid3 = true;
                      passingSchemas3 = 2;
                    }
                  }
                }
                if (!valid3) {
                  var err = {};
                  if (vErrors === null) vErrors = [err];
                  else vErrors.push(err);
                  errors++;
                } else {
                  errors = errs__3;
                  if (vErrors !== null) {
                    if (errs__3) vErrors.length = errs__3;
                    else vErrors = null;
                  }
                }
                var valid3 = errors === errs_3;
                if (valid3) {
                  var err = {};
                  if (vErrors === null) vErrors = [err];
                  else vErrors.push(err);
                  errors++;
                } else {
                  errors = errs__2;
                  if (vErrors !== null) {
                    if (errs__2) vErrors.length = errs__2;
                    else vErrors = null;
                  }
                }
                var valid2 = errors === errs_2;
                errors = errs__1;
                if (vErrors !== null) {
                  if (errs__1) vErrors.length = errs__1;
                  else vErrors = null;
                }
                if (valid2) {
                  var errs_2 = errors;
                  customRule0.errors = null;
                  var errs__2 = errors;
                  var valid2;
                  valid2 = customRule0.call(self, validate.schema.properties.https.then.setDefaultValue, data1, validate.schema.properties.https.then, (dataPath || '') + '.https', data, 'https', rootData);
                  if (data) data1 = data['https'];
                  if (!valid2) {
                    validate.errors = [{
                      keyword: 'setDefaultValue',
                      dataPath: (dataPath || '') + '.https',
                      schemaPath: '#/properties/https/then/setDefaultValue',
                      params: {
                        keyword: 'setDefaultValue'
                      },
                      message: 'should pass "setDefaultValue" keyword validation'
                    }];
                    return false;
                  }
                  var valid2 = errors === errs_2;
                  valid1 = valid2;
                }
                if (!valid1) {
                  var err = {
                    keyword: 'if',
                    dataPath: (dataPath || '') + '.https',
                    schemaPath: '#/properties/https/if',
                    params: {
                      failingKeyword: 'then'
                    },
                    message: 'should match "' + 'then' + '" schema'
                  };
                  if (vErrors === null) vErrors = [err];
                  else vErrors.push(err);
                  errors++;
                  validate.errors = vErrors;
                  return false;
                }
                var valid1 = errors === errs_1;
              }
              if (valid1) {
                var data1 = data.ignoreTrailingSlash;
                var errs_1 = errors;
                if (typeof data1 !== "boolean") {
                  var dataType1 = typeof data1;
                  var coerced1 = undefined;
                  if (data1 === 'false' || data1 === 0 || data1 === null) coerced1 = false;
                  else if (data1 === 'true' || data1 === 1) coerced1 = true;
                  if (coerced1 === undefined) {
                    validate.errors = [{
                      keyword: 'type',
                      dataPath: (dataPath || '') + '.ignoreTrailingSlash',
                      schemaPath: '#/properties/ignoreTrailingSlash/type',
                      params: {
                        type: 'boolean'
                      },
                      message: 'should be boolean'
                    }];
                    return false;
                  } else {
                    data1 = coerced1;
                    data['ignoreTrailingSlash'] = coerced1;
                  }
                }
                var valid1 = errors === errs_1;
                if (valid1) {
                  var data1 = data.disableRequestLogging;
                  var errs_1 = errors;
                  if (typeof data1 !== "boolean") {
                    var dataType1 = typeof data1;
                    var coerced1 = undefined;
                    if (data1 === 'false' || data1 === 0 || data1 === null) coerced1 = false;
                    else if (data1 === 'true' || data1 === 1) coerced1 = true;
                    if (coerced1 === undefined) {
                      validate.errors = [{
                        keyword: 'type',
                        dataPath: (dataPath || '') + '.disableRequestLogging',
                        schemaPath: '#/properties/disableRequestLogging/type',
                        params: {
                          type: 'boolean'
                        },
                        message: 'should be boolean'
                      }];
                      return false;
                    } else {
                      data1 = coerced1;
                      data['disableRequestLogging'] = coerced1;
                    }
                  }
                  var valid1 = errors === errs_1;
                  if (valid1) {
                    var data1 = data.maxParamLength;
                    var errs_1 = errors;
                    if ((typeof data1 !== "number" || (data1 % 1) || data1 !== data1)) {
                      var dataType1 = typeof data1;
                      var coerced1 = undefined;
                      if (dataType1 == 'boolean' || data1 === null || (dataType1 == 'string' && data1 && data1 == +data1 && !(data1 % 1))) coerced1 = +data1;
                      if (coerced1 === undefined) {
                        validate.errors = [{
                          keyword: 'type',
                          dataPath: (dataPath || '') + '.maxParamLength',
                          schemaPath: '#/properties/maxParamLength/type',
                          params: {
                            type: 'integer'
                          },
                          message: 'should be integer'
                        }];
                        return false;
                      } else {
                        data1 = coerced1;
                        data['maxParamLength'] = coerced1;
                      }
                    }
                    var valid1 = errors === errs_1;
                    if (valid1) {
                      var data1 = data.onProtoPoisoning;
                      var errs_1 = errors;
                      if (typeof data1 !== "string") {
                        var dataType1 = typeof data1;
                        var coerced1 = undefined;
                        if (dataType1 == 'number' || dataType1 == 'boolean') coerced1 = '' + data1;
                        else if (data1 === null) coerced1 = '';
                        if (coerced1 === undefined) {
                          validate.errors = [{
                            keyword: 'type',
                            dataPath: (dataPath || '') + '.onProtoPoisoning',
                            schemaPath: '#/properties/onProtoPoisoning/type',
                            params: {
                              type: 'string'
                            },
                            message: 'should be string'
                          }];
                          return false;
                        } else {
                          data1 = coerced1;
                          data['onProtoPoisoning'] = coerced1;
                        }
                      }
                      var valid1 = errors === errs_1;
                      if (valid1) {
                        var data1 = data.onConstructorPoisoning;
                        var errs_1 = errors;
                        if (typeof data1 !== "string") {
                          var dataType1 = typeof data1;
                          var coerced1 = undefined;
                          if (dataType1 == 'number' || dataType1 == 'boolean') coerced1 = '' + data1;
                          else if (data1 === null) coerced1 = '';
                          if (coerced1 === undefined) {
                            validate.errors = [{
                              keyword: 'type',
                              dataPath: (dataPath || '') + '.onConstructorPoisoning',
                              schemaPath: '#/properties/onConstructorPoisoning/type',
                              params: {
                                type: 'string'
                              },
                              message: 'should be string'
                            }];
                            return false;
                          } else {
                            data1 = coerced1;
                            data['onConstructorPoisoning'] = coerced1;
                          }
                        }
                        var valid1 = errors === errs_1;
                        if (valid1) {
                          var data1 = data.pluginTimeout;
                          var errs_1 = errors;
                          if ((typeof data1 !== "number" || (data1 % 1) || data1 !== data1)) {
                            var dataType1 = typeof data1;
                            var coerced1 = undefined;
                            if (dataType1 == 'boolean' || data1 === null || (dataType1 == 'string' && data1 && data1 == +data1 && !(data1 % 1))) coerced1 = +data1;
                            if (coerced1 === undefined) {
                              validate.errors = [{
                                keyword: 'type',
                                dataPath: (dataPath || '') + '.pluginTimeout',
                                schemaPath: '#/properties/pluginTimeout/type',
                                params: {
                                  type: 'integer'
                                },
                                message: 'should be integer'
                              }];
                              return false;
                            } else {
                              data1 = coerced1;
                              data['pluginTimeout'] = coerced1;
                            }
                          }
                          var valid1 = errors === errs_1;
                          if (valid1) {
                            var data1 = data.requestIdHeader;
                            var errs_1 = errors;
                            if (typeof data1 !== "string") {
                              var dataType1 = typeof data1;
                              var coerced1 = undefined;
                              if (dataType1 == 'number' || dataType1 == 'boolean') coerced1 = '' + data1;
                              else if (data1 === null) coerced1 = '';
                              if (coerced1 === undefined) {
                                validate.errors = [{
                                  keyword: 'type',
                                  dataPath: (dataPath || '') + '.requestIdHeader',
                                  schemaPath: '#/properties/requestIdHeader/type',
                                  params: {
                                    type: 'string'
                                  },
                                  message: 'should be string'
                                }];
                                return false;
                              } else {
                                data1 = coerced1;
                                data['requestIdHeader'] = coerced1;
                              }
                            }
                            var valid1 = errors === errs_1;
                            if (valid1) {
                              var data1 = data.requestIdLogLabel;
                              var errs_1 = errors;
                              if (typeof data1 !== "string") {
                                var dataType1 = typeof data1;
                                var coerced1 = undefined;
                                if (dataType1 == 'number' || dataType1 == 'boolean') coerced1 = '' + data1;
                                else if (data1 === null) coerced1 = '';
                                if (coerced1 === undefined) {
                                  validate.errors = [{
                                    keyword: 'type',
                                    dataPath: (dataPath || '') + '.requestIdLogLabel',
                                    schemaPath: '#/properties/requestIdLogLabel/type',
                                    params: {
                                      type: 'string'
                                    },
                                    message: 'should be string'
                                  }];
                                  return false;
                                } else {
                                  data1 = coerced1;
                                  data['requestIdLogLabel'] = coerced1;
                                }
                              }
                              var valid1 = errors === errs_1;
                              if (valid1) {
                                var data1 = data.http2SessionTimeout;
                                var errs_1 = errors;
                                if ((typeof data1 !== "number" || (data1 % 1) || data1 !== data1)) {
                                  var dataType1 = typeof data1;
                                  var coerced1 = undefined;
                                  if (dataType1 == 'boolean' || data1 === null || (dataType1 == 'string' && data1 && data1 == +data1 && !(data1 % 1))) coerced1 = +data1;
                                  if (coerced1 === undefined) {
                                    validate.errors = [{
                                      keyword: 'type',
                                      dataPath: (dataPath || '') + '.http2SessionTimeout',
                                      schemaPath: '#/properties/http2SessionTimeout/type',
                                      params: {
                                        type: 'integer'
                                      },
                                      message: 'should be integer'
                                    }];
                                    return false;
                                  } else {
                                    data1 = coerced1;
                                    data['http2SessionTimeout'] = coerced1;
                                  }
                                }
                                var valid1 = errors === errs_1;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    } else {
      validate.errors = [{
        keyword: 'type',
        dataPath: (dataPath || '') + "",
        schemaPath: '#/type',
        params: {
          type: 'object'
        },
        message: 'should be object'
      }];
      return false;
    }
    validate.errors = vErrors;
    return errors === 0;
  };
})();
validate.schema = {
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "bodyLimit": {
      "type": "integer",
      "default": 1048576
    },
    "caseSensitive": {
      "type": "boolean",
      "default": true
    },
    "http2": {
      "type": "boolean"
    },
    "https": {
      "if": {
        "not": {
          "oneOf": [{
            "type": "boolean"
          }, {
            "type": "null"
          }, {
            "type": "object",
            "additionalProperties": false,
            "required": ["allowHTTP1"],
            "properties": {
              "allowHTTP1": {
                "type": "boolean"
              }
            }
          }]
        }
      },
      "then": {
        "setDefaultValue": true
      }
    },
    "ignoreTrailingSlash": {
      "type": "boolean",
      "default": false
    },
    "disableRequestLogging": {
      "type": "boolean",
      "default": false
    },
    "maxParamLength": {
      "type": "integer",
      "default": 100
    },
    "onProtoPoisoning": {
      "type": "string",
      "default": "error"
    },
    "onConstructorPoisoning": {
      "type": "string",
      "default": "ignore"
    },
    "pluginTimeout": {
      "type": "integer",
      "default": 10000
    },
    "requestIdHeader": {
      "type": "string",
      "default": "request-id"
    },
    "requestIdLogLabel": {
      "type": "string",
      "default": "reqId"
    },
    "http2SessionTimeout": {
      "type": "integer",
      "default": 5000
    }
  }
};
validate.errors = null;
module.exports = validate;

function customRule0 (schemaParamValue, validatedParamValue, validationSchemaObject, currentDataPath, validatedParamObject, validatedParam) {
  validatedParamObject[validatedParam] = schemaParamValue
  return true
}

module.exports.defaultInitOptions = {"bodyLimit":1048576,"caseSensitive":true,"disableRequestLogging":false,"ignoreTrailingSlash":false,"maxParamLength":100,"onProtoPoisoning":"error","onConstructorPoisoning":"ignore","pluginTimeout":10000,"requestIdHeader":"request-id","requestIdLogLabel":"reqId","http2SessionTimeout":5000}
