code: function getRawBody (stream, options, callback) {
    var done = callback
    var opts = options || {}
  
    if (options === true || typeof options === 'string') {
      // short cut for encoding
      opts = {
        encoding: options
      }
    }
  
    if (typeof options === 'function') {
      done = options
      opts = {}
    }
  
    // validate callback is a function, if provided
    if (done !== undefined && typeof done !== 'function') {
      throw new TypeError('argument callback must be a function')
    }
  
    // require the callback without promises
    if (!done && !global.Promise) {
      throw new TypeError('argument callback is required')
    }
  
    // get encoding
    var encoding = opts.encoding !== true
      ? opts.encoding
      : 'utf-8'
  
    // convert the limit to an integer
    var limit = bytes.parse(opts.limit)
  
    // convert the expected length to an integer
    var length = opts.length != null && !isNaN(opts.length)
      ? parseInt(opts.length, 10)
      : null
  
    if (done) {
      // classic callback style
      return readStream(stream, encoding, length, limit, done)
    }
  
    return new Promise(function executor (resolve, reject) {
      readStream(stream, encoding, length, limit, function onRead (err, buf) {
        if (err) return reject(err)
        resolve(buf)
      })
    })
  }
docs: Get the raw body of a stream (typically HTTP).
  
  @param {object} stream
  @param {object|string|function} [options]
  @param {function} [callback]
  @public