This commit changes the api of the stream classes, since indication of success or failure is no longer necessary.
53 lines
1.1 KiB
PHP
53 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Nih\CommandBuilder;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
trait StreamTrait
|
|
{
|
|
/**
|
|
* @param resource $stream
|
|
*
|
|
* @throws InvalidArgumentException When stream is not a stream
|
|
*/
|
|
public function __construct(private readonly mixed $stream)
|
|
{
|
|
if (get_resource_type($stream) !== 'stream') {
|
|
throw new InvalidArgumentException('resource is not a stream');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Close the stream.
|
|
*
|
|
* Noop if the stream was already closed.
|
|
*
|
|
* @throws StreamException
|
|
*/
|
|
public function close(): void
|
|
{
|
|
if (get_resource_type($this->stream) !== 'stream') {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
set_error_handler(StreamException::handleError(...));
|
|
$success = fclose($this->stream);
|
|
} finally {
|
|
restore_error_handler();
|
|
}
|
|
|
|
assert($success);
|
|
}
|
|
|
|
public function __destruct()
|
|
{
|
|
if (get_resource_type($this->stream) === 'stream') {
|
|
fclose($this->stream);
|
|
}
|
|
}
|
|
}
|