// Generated by CoffeeScript 1.12.7

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

(function() {
  var RemoveFileError,
    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;

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

    RemoveFileError.prototype.message = 'Failed to cleanup temporary file';

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

    return RemoveFileError;

  })(Error);

  module.exports = RemoveFileError;

}).call(this);
