text: var inherits = require('inherits');
  var Readable = require('readable-stream').Readable;
  var extend = require('xtend');
  var EncodingError = require('level-errors').EncodingError;
  
  module.exports = ReadStream;
  inherits(ReadStream, Readable);
  
  function ReadStream(iterator, options) {
      if (!(this instanceof ReadStream)) return new ReadStream(iterator, options);
      Readable.call(this, extend(options, {
          objectMode: true
      }));
      this._iterator = iterator;
      this._destroyed = false;
      this._decoder = null;
      if (options && options.decoder) this._decoder = options.decoder;
      this.on('end', this._cleanup.bind(this));
  }
  
  ReadStream.prototype._read = function () {
      var self = this;
      if (this._destroyed) return;
  
      this._iterator.next(function (err, key, value) {
          if (self._destroyed) return;
          if (err) return self.emit('error', err);
          if (key === undefined && value === undefined) {
              self.push(null);
          } else {
              if (!self._decoder) return self.push({key: key, value: value});
  
              try {
                  var value = self._decoder(key, value);
              } catch (err) {
                  self.emit('error', new EncodingError(err));
                  self.push(null);
                  return;
              }
              self.push(value);
          }
      });
  };
  
  ReadStream.prototype.destroy =
      ReadStream.prototype._cleanup = function () {
          var self = this;
          if (this._destroyed) return;
          this._destroyed = true;
  
          this._iterator.end(function (err) {
              if (err) return self.emit('error', err);
              self.emit('close');
          });
      };
  
  