Skip to content

Commit 46419a0

Browse files
committed
feat: add a consumer parameter to constructor
1 parent 331dc50 commit 46419a0

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/ResourceIteratorAggregate.php

+6-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace loophp\iterators;
66

7+
use Closure;
78
use Generator;
89
use InvalidArgumentException;
910
use IteratorAggregate;
@@ -28,8 +29,9 @@ final class ResourceIteratorAggregate implements IteratorAggregate
2829
/**
2930
* @param false|resource $resource
3031
* @param null|non-negative-int $length
32+
* @param Closure(resource): string $consumer
3133
*/
32-
public function __construct($resource, private bool $closeResource = false, ?int $length = null)
34+
public function __construct($resource, private bool $closeResource = false, ?int $length = null, private ?Closure $consumer = null)
3335
{
3436
if (!is_resource($resource) || 'stream' !== get_resource_type($resource)) {
3537
throw new InvalidArgumentException('Invalid resource type.');
@@ -52,15 +54,15 @@ public function getIterator(): Generator
5254
/**
5355
* @param resource $resource
5456
*/
55-
static fn ($resource): string|false => fgetc($resource);
57+
static fn ($resource): false|string => fgetc($resource);
5658

5759
$fgets =
5860
/**
5961
* @param resource $resource
6062
*/
61-
static fn ($resource): string|false => fgets($resource, $length);
63+
static fn ($resource): false|string => fgets($resource, $length);
6264

63-
$function = (null === $length) ? $fgetc : $fgets;
65+
$function = $this->consumer ?? ((null === $length) ? $fgetc : $fgets);
6466

6567
try {
6668
while (false !== $chunk = $function($resource)) {

0 commit comments

Comments
 (0)