option

Форк
0
/
None.php 
69 строк · 1.4 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Upside\Std;
6

7
/**
8
 * @implements Option<null>
9
 */
10
final readonly class None implements Option
11
{
12
    #[\Override]
13
    public function is_none(): bool
14
    {
15
        return true;
16
    }
17

18
    #[\Override]
19
    public function is_some(): bool
20
    {
21
        return false;
22
    }
23

24
    #[\Override]
25
    public function is_some_and(callable $op): bool
26
    {
27
        return false;
28
    }
29

30
    #[\Override]
31
    public function expect_or(\Exception $e): never
32
    {
33
        throw $e;
34
    }
35

36
    #[\Override]
37
    public function expect(string $msg): never
38
    {
39
        throw new \RuntimeException($msg);
40
    }
41

42
    #[\Override]
43
    public function unwrap(): never
44
    {
45
        throw new \RuntimeException('The option is none');
46
    }
47

48
    /**
49
     * @template D of callable|object|array<mixed>|string|float|int|bool
50
     * @phpstan-param D $default
51
     * @phpstan-return D
52
     */
53
    #[\Override]
54
    public function unwrap_or(callable|object|iterable|string|float|int|bool $default): callable|object|iterable|string|float|int|bool
55
    {
56
        return $default;
57
    }
58

59
    /**
60
     * @template D of callable|object|array<mixed>|string|float|int|bool
61
     * @phpstan-param callable():D $op
62
     * @phpstan-return D
63
     */
64
    #[\Override]
65
    public function unwrap_or_else(callable $op): callable|object|iterable|string|float|int|bool
66
    {
67
        return $op();
68
    }
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.