$modes */ public function __construct( #[TaggedIterator(WorkingTimeMode::class)] private readonly iterable $modes ) { } /** * @return WorkingTimeMode[] */ public function getAll(): array { $modes = []; foreach ($this->modes as $mode) { $modes[] = $mode; } return $modes; } public function getModeForUser(User $user): WorkingTimeMode { return $this->getMode($user->getWorkContractMode()); } public function getMode(string $contractMode): WorkingTimeMode { foreach ($this->modes as $mode) { if ($mode->getId() === $contractMode) { return $mode; } } throw new \InvalidArgumentException('Unknown working contract mode: ' . $contractMode); } }