Lines 100.00% 8 / 8
Functions and Methods 100.00% 3 / 3
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
QuestCompletedEvent 100.00% 8 / 8 100.00% 3 / 3 3 100.00% 1 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 from 100.00% 6 / 6 100.00% 1 / 1 1
 summary 100.00% 1 / 1 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Lorekeeper\Server\Event\Quest;
6
7use Lorekeeper\Core\World\Quest\QuestId;
8use Lorekeeper\Core\World\Quest\QuestName;
9use Lorekeeper\Server\Event\Event;
10use Lorekeeper\Server\Event\NamedAfterClass;
11use Lorekeeper\Server\Event\Quest\Helper\QuestAnswer;
12use Lorekeeper\Server\Message\Message;
13use Override;
14use Psl\Option;
15
16final readonly class QuestCompletedEvent implements Event
17{
18    use NamedAfterClass;
19
20    public function __construct(
21        public QuestId $quest,
22        public QuestName $name,
23    ) {}
24
25    /** @return Option\Option<static> */
26    #[Override]
27    public static function from(Message $message): Option\Option
28    {
29        return QuestAnswer::read(
30            $message,
31            static::class,
32        )->filter(static fn(QuestAnswer $answer): bool => $answer->completed)->map(
33            static fn(QuestAnswer $answer): static => new static($answer->quest, $answer->name),
34        );
35    }
36
37    #[Override]
38    public function summary(): string
39    {
40        return "Completed {$this->name->value}";
41    }
42}