function whenFinished(WritableObjectStream $stream) : Promise
{
    $promise = __promise($graceful = true);
    $stream->on('finish', [$promise, 'resolve']);
    $stream->on('error', [$promise, 'resolve']);
    $promise->when(function () use($stream, $promise) {
        $stream->removeListener('finish', [$promise, 'resolve']);
        $stream->removeListener('error', [$promise, 'resolve']);
    });
    return $promise;
}
 /**
  * @throws StreamEndedException
  */
 public function write($object, callable $onFlush = null) : bool
 {
     return $this->writable->write($object, $onFlush);
 }