2017-05-08 11:15:10 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Amp\ByteStream;
|
|
|
|
|
|
|
|
use Amp\Promise;
|
|
|
|
use Amp\Success;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Input stream with a single already known data chunk.
|
|
|
|
*/
|
2018-09-21 22:45:13 +02:00
|
|
|
final class InMemoryStream implements InputStream
|
|
|
|
{
|
2017-05-08 11:15:10 +02:00
|
|
|
private $contents;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string|null $contents Data chunk or `null` for no data chunk.
|
|
|
|
*/
|
2018-09-21 22:45:13 +02:00
|
|
|
public function __construct(string $contents = null)
|
|
|
|
{
|
2017-05-08 11:15:10 +02:00
|
|
|
$this->contents = $contents;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reads data from the stream.
|
|
|
|
*
|
|
|
|
* @return Promise Resolves with the full contents or `null` if the stream has closed / already been consumed.
|
|
|
|
*/
|
2018-09-21 22:45:13 +02:00
|
|
|
public function read(): Promise
|
|
|
|
{
|
2017-05-08 11:15:10 +02:00
|
|
|
if ($this->contents === null) {
|
|
|
|
return new Success;
|
|
|
|
}
|
|
|
|
|
|
|
|
$promise = new Success($this->contents);
|
|
|
|
$this->contents = null;
|
|
|
|
|
|
|
|
return $promise;
|
|
|
|
}
|
|
|
|
}
|