Lines 100.00% 6 / 6
Functions and Methods 100.00% 2 / 2
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
LoginFailedEvent 100.00% 6 / 6 100.00% 2 / 2 5 100.00% 1 / 1
 from 100.00% 5 / 5 100.00% 1 / 1 4
 summary 100.00% 1 / 1 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Lorekeeper\Server\Event\Session;
6
7use Lorekeeper\Server\Event\Event;
8use Lorekeeper\Server\Event\NamedAfterClass;
9use Lorekeeper\Server\Message\DelimitedMessage;
10use Lorekeeper\Server\Message\Message;
11use Override;
12use Psl\Option;
13
14final readonly class LoginFailedEvent implements Event
15{
16    use NamedAfterClass;
17
18    /** @return Option\Option<static> */
19    #[Override]
20    public static function from(Message $message): Option\Option
21    {
22        if (!$message instanceof DelimitedMessage || ($message->data[1] ?? null) !== 'loginResponse') {
23            return Option\none();
24        }
25
26        if (!in_array($message->data[3] ?? null, ['0', 'false'], strict: true)) {
27            return Option\none();
28        }
29
30        return Option\some(new static());
31    }
32
33    #[Override]
34    public function summary(): string
35    {
36        return 'Login refused';
37    }
38}