<?php

namespace WP_Ultimo\Dependencies\Amp\ByteStream;

use WP_Ultimo\Dependencies\Amp\Promise;
use WP_Ultimo\Dependencies\Amp\Success;
/**
 * Input stream with a single already known data chunk.
 */
final class InMemoryStream implements InputStream
{
    private $contents;
    /**
     * @param string|null $contents Data chunk or `null` for no data chunk.
     */
    public function __construct(string $contents = null)
    {
        $this->contents = $contents;
    }
    /**
     * Reads data from the stream.
     *
     * @return Promise<string|null> Resolves with the full contents or `null` if the stream has closed / already been consumed.
     */
    public function read() : Promise
    {
        if ($this->contents === null) {
            return new Success();
        }
        $promise = new Success($this->contents);
        $this->contents = null;
        return $promise;
    }
}
