Lines 0.00% 0 / 2
Functions and Methods 0.00% 0 / 2
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
DiscoveredAppCollection 0.00% 0 / 2 0.00% 0 / 2 6 0.00% 0 / 1
 fromApps 0.00% 0 / 1 0.00% 0 / 1 2
 listAppIds 0.00% 0 / 1 0.00% 0 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\App\Collection;
6
7use Stewart\Contracts\App\AppId;
8use Stewart\Contracts\App\Collection\AppIdCollection;
9use Stewart\Contracts\Collection\ListCollection;
10use Stewart\Runtime\App\DiscoveredApp;
11
12/** @extends ListCollection<DiscoveredApp> */
13final readonly class DiscoveredAppCollection extends ListCollection
14{
15    /** @param iterable<DiscoveredApp> $apps */
16    public static function fromApps(iterable $apps): self
17    {
18        return self::fromList($apps)->sortedBy(static fn(DiscoveredApp $a, DiscoveredApp $b): int => strcmp($a->id->value, $b->id->value));
19    }
20
21    public function listAppIds(): AppIdCollection
22    {
23        return AppIdCollection::fromList($this->mapToList(static fn(DiscoveredApp $app): AppId => $app->id));
24    }
25}