docs: function makeConstructor(name, defaults) {
  
      assert.string(name, 'name');
      assert.optionalObject(defaults, 'defaults');
  
      // code property doesn't have 'Error' in it. remove it.
      var defaultCode = name.replace(new RegExp('[Ee]rror$'), '');
      var prototypeDefaults = _.assign({}, {
          name: name,
          code: (defaults && defaults.code) || defaultCode,
          restCode: _.get(defaults, 'restCode', defaultCode)
      }, defaults);
  
      // assert that this constructor doesn't already exist.
      assert.equal(
          typeof module.exports[name],
          'undefined',
          'Constructor already exists!'
      );
  
      // dynamically create a constructor.
      // must be anonymous fn.
      var ErrCtor = function() { // eslint-disable-line require-jsdoc, func-style
          // call super
          RestError.apply(this, arguments);
          this.name = name;
      };
      util.inherits(ErrCtor, RestError);
  
      // copy over all options to prototype
      _.assign(ErrCtor.prototype, prototypeDefaults);
  
      // assign display name
      ErrCtor.displayName = name;
  
      // return constructor to user, they can choose how to store and manage it.
      return ErrCtor;
  }