'use strict';

var resolve = require('./resolve');

module.exports = {

Validation: errorSubclass(ValidationError),
MissingRef: errorSubclass(MissingRefError)

};

function ValidationError(errors) {

this.message = 'validation failed';
this.errors = errors;
this.ajv = this.validation = true;

}

MissingRefError.message = function (baseId, ref) {

return 'can\'t resolve reference ' + ref + ' from id ' + baseId;

};

function MissingRefError(baseId, ref, message) {

this.message = message || MissingRefError.message(baseId, ref);
this.missingRef = resolve.url(baseId, ref);
this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));

}

function errorSubclass(Subclass) {

Subclass.prototype = Object.create(Error.prototype);
Subclass.prototype.constructor = Subclass;
return Subclass;

}