22
33namespace Kiboko \Component \Bucket ;
44
5- use Kiboko \Contract \Bucket \AcceptanceResultBucketInterface ;
6- use Kiboko \Contract \Bucket \RejectionResultBucketInterface ;
7- use Kiboko \Contract \Bucket \ResultBucketInterface ;
5+ use Kiboko \Contract \Bucket as Contract ;
86
7+ /**
8+ * @template Type
9+ * @implements Contract\AcceptanceResultBucketInterface<Type>
10+ * @implements Contract\RejectionResultBucketInterface<Type>
11+ */
912final class ComplexResultBucket implements
10- AcceptanceResultBucketInterface,
11- RejectionResultBucketInterface
13+ Contract \ AcceptanceResultBucketInterface,
14+ Contract \ RejectionResultBucketInterface
1215{
13- /** @var AcceptanceResultBucketInterface[] */
14- private $ acceptances ;
15- /** @var RejectionResultBucketInterface[] */
16- private $ rejections ;
16+ /** @var array<Contract\ AcceptanceResultBucketInterface<Type>> */
17+ private array $ acceptances ;
18+ /** @var array<Contract\ RejectionResultBucketInterface<Type>> */
19+ private array $ rejections ;
1720
18- public function __construct (ResultBucketInterface ... $ buckets )
21+ /** @param Contract\AcceptanceResultBucketInterface<Type>|Contract\RejectionResultBucketInterface<Type> ...$buckets */
22+ public function __construct (Contract \AcceptanceResultBucketInterface |Contract \RejectionResultBucketInterface ... $ buckets )
1923 {
2024 $ this ->acceptances = array_filter (
2125 $ buckets ,
22- function (ResultBucketInterface $ bucket ) {
23- return $ bucket instanceof AcceptanceResultBucketInterface;
26+ function (Contract \ ResultBucketInterface $ bucket ) {
27+ return $ bucket instanceof Contract \ AcceptanceResultBucketInterface;
2428 }
2529 );
2630
2731 $ this ->rejections = array_filter (
2832 $ buckets ,
29- function (ResultBucketInterface $ bucket ) {
30- return $ bucket instanceof RejectionResultBucketInterface;
33+ function (Contract \ ResultBucketInterface $ bucket ) {
34+ return $ bucket instanceof Contract \ RejectionResultBucketInterface;
3135 }
3236 );
3337 }
3438
39+ /** @param Type ...$values */
3540 public function accept (...$ values ): void
3641 {
3742 $ this ->acceptances [] = new AcceptanceResultBucket (...$ values );
3843 }
3944
45+ /** @param Type ...$values */
4046 public function reject (...$ values ): void
4147 {
4248 $ this ->rejections [] = new RejectionResultBucket (...$ values );
@@ -46,7 +52,7 @@ public function walkAcceptance(): iterable
4652 {
4753 $ iterator = new \AppendIterator ();
4854 foreach ($ this ->acceptances as $ child ) {
49- /** @var array|\Traversable $acceptance */
55+ /** @var array<Type> |\Traversable<Type> $acceptance */
5056 $ acceptance = $ child ->walkAcceptance ();
5157 if ($ acceptance instanceof \Iterator) {
5258 $ iterator ->append ($ acceptance );
@@ -64,7 +70,7 @@ public function walkRejection(): iterable
6470 {
6571 $ iterator = new \AppendIterator ();
6672 foreach ($ this ->rejections as $ child ) {
67- /** @var array|\Traversable $rejection */
73+ /** @var array<Type> |\Traversable<Type> $rejection */
6874 $ rejection = $ child ->walkRejection ();
6975 if ($ rejection instanceof \Iterator) {
7076 $ iterator ->append ($ rejection );
0 commit comments