// Generated by CoffeeScript 1.12.7

/*
  ExternalEditor
  Kevin Gravier <kevin@mrkmg.com>
  MIT
 */

(function() {
  var ReadFileError,
    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    hasProp = {}.hasOwnProperty;

  ReadFileError = (function(superClass) {
    extend(ReadFileError, superClass);

    ReadFileError.prototype.message = 'Failed to read temporary file';

    function ReadFileError(original_error) {
      this.original_error = original_error;
    }

    return ReadFileError;

  })(Error);

  module.exports = ReadFileError;

}).call(this);
