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
QuestTurnInRefusedEvent 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 QuestTurnInRefusedEvent implements Event
17{
18    use NamedAfterClass;
19
20    public function __construct(
21        public QuestId $quest,
22        public QuestName $name,
23        public string $reason,
24    ) {}
25
26    /** @return Option\Option<static> */
27    #[Override]
28    public static function from(Message $message): Option\Option
29    {
30        return QuestAnswer::read(
31            $message,
32            static::class,
33        )->filter(static fn(QuestAnswer $answer): bool => !$answer->completed)->map(
34            static fn(QuestAnswer $answer): static => new static($answer->quest, $answer->name, $answer->reason),
35        );
36    }
37
38    #[Override]
39    public function summary(): string
40    {
41        return "Could not complete {$this->name->value}: {$this->reason}";
42    }
43}