Lines
100.00%
11 / 11
Functions and Methods
100.00%
2 / 2
Classes and Traits
100.00%
1 / 1
| Name | Lines | Functions and Methods | CRAP | Classes and Traits | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| AppState | 100.00% | 11 / 11 | 100.00% | 2 / 2 | 11 | 100.00% | 1 / 1 | |||
| canEnter | 100.00% | 8 / 8 | 100.00% | 1 / 1 | 8 | |||||
| isTerminal | 100.00% | 3 / 3 | 100.00% | 1 / 1 | 3 | |||||
| 1 | <?php | |
| 2 | ||
| 3 | declare(strict_types=1); | |
| 4 | ||
| 5 | namespace Stewart\Runtime\Lifecycle; | |
| 6 | ||
| 7 | enum AppState: string | |
| 8 | { | |
| 9 | case Declared = 'declared'; | |
| 10 | case Constructing = 'constructing'; | |
| 11 | case Constructed = 'constructed'; | |
| 12 | case Initializing = 'initializing'; | |
| 13 | case Initialized = 'initialized'; | |
| 14 | case Running = 'running'; | |
| 15 | case Disposing = 'disposing'; | |
| 16 | case Failed = 'failed'; | |
| 17 | case Skipped = 'skipped'; | |
| 18 | case Disposed = 'disposed'; | |
| 19 | case Abandoned = 'abandoned'; | |
| 20 | ||
| 21 | public function canEnter(self $next): bool | |
| 22 | { | |
| 23 | return \in_array($next, match ($this) { | |
| 24 | self::Declared => [self::Constructing, self::Skipped, self::Failed, self::Abandoned], | |
| 25 | self::Constructing => [self::Constructed, self::Failed, self::Skipped, self::Abandoned], | |
| 26 | self::Constructed => [self::Initializing, self::Skipped, self::Abandoned], | |
| 27 | self::Initializing => [self::Running, self::Initialized, self::Failed, self::Abandoned], | |
| 28 | self::Initialized, self::Running => [self::Disposing, self::Abandoned], | |
| 29 | self::Disposing => [self::Disposed, self::Abandoned], | |
| 30 | self::Failed, self::Skipped, self::Disposed, self::Abandoned => [], | |
| 31 | }, true); | |
| 32 | } | |
| 33 | ||
| 34 | public function isTerminal(): bool | |
| 35 | { | |
| 36 | return match ($this) { | |
| 37 | self::Failed, self::Skipped, self::Disposed, self::Abandoned => true, | |
| 38 | default => false, | |
| 39 | }; | |
| 40 | } | |
| 41 | } |