|
|
|
@@ -1,5 +1,10 @@
|
|
|
|
|
# tez-utils-enum
|
|
|
|
|
|
|
|
|
|
[](https://github.com/tezmanian/tez-utils-enum/actions/workflows/php.yml)
|
|
|
|
|
[](https://packagist.org/packages/tezmanian/utils-enum)
|
|
|
|
|
[](https://packagist.org/packages/tezmanian/utils-enum)
|
|
|
|
|
[](LICENSE)
|
|
|
|
|
|
|
|
|
|
Composable PHP 8.3 traits that extend native enums with lookup, comparison, navigation, bitmask, label, and collection helpers.
|
|
|
|
|
|
|
|
|
|
**Zero dependencies** · **PHPStan level 9** · **MIT**
|
|
|
|
@@ -7,9 +12,11 @@ Composable PHP 8.3 traits that extend native enums with lookup, comparison, navi
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
composer require tez/utils-enum
|
|
|
|
|
composer require tezmanian/utils-enum
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Package: [`tezmanian/utils-enum`](https://packagist.org/packages/tezmanian/utils-enum) · Namespace: `Tezmanian\Utils\Enum`
|
|
|
|
|
|
|
|
|
|
Requires PHP ≥ 8.3.
|
|
|
|
|
|
|
|
|
|
## Traits
|
|
|
|
@@ -31,7 +38,7 @@ Requires PHP ≥ 8.3.
|
|
|
|
|
Base trait for pure (unit) enums. Use `BackedEnumTrait` instead when your enum has backing values.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\EnumTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\EnumTrait;
|
|
|
|
|
|
|
|
|
|
enum Status
|
|
|
|
|
{
|
|
|
|
@@ -78,7 +85,7 @@ Status::toArray(); // ['Draft' => 'Draft', 'Published' => 'Published', 'Archived
|
|
|
|
|
Extends `EnumTrait` for string- or int-backed enums. Overrides `is()` to match by backing value, and `toArray()` to return `[value => name]`.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\BackedEnumTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\BackedEnumTrait;
|
|
|
|
|
|
|
|
|
|
enum Color: string
|
|
|
|
|
{
|
|
|
|
@@ -124,7 +131,7 @@ Bitmask helpers for int-backed enums used as flag sets. Case values must be powe
|
|
|
|
|
Does not include `BackedEnumTrait` — combine them explicitly if needed.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\BitFlagTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\BitFlagTrait;
|
|
|
|
|
|
|
|
|
|
enum Permission: int
|
|
|
|
|
{
|
|
|
|
@@ -168,7 +175,7 @@ Permission::fromBitmask(0); // []
|
|
|
|
|
Comparison helpers for int-backed enums, comparing cases by their backing values.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\ComparableTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\ComparableTrait;
|
|
|
|
|
|
|
|
|
|
enum Priority: int
|
|
|
|
|
{
|
|
|
|
@@ -205,7 +212,7 @@ Navigate to adjacent cases by definition order. Designed for state machines and
|
|
|
|
|
Order is determined by **definition order** (ordinal), not backing value. Returns `null` at boundaries — no wrap-around.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\StepTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\StepTrait;
|
|
|
|
|
|
|
|
|
|
enum CheckoutStep
|
|
|
|
|
{
|
|
|
|
@@ -238,7 +245,7 @@ CheckoutStep::PersonalInfo->prev(); // null (first step)
|
|
|
|
|
Human-readable labels for enum cases, without any framework dependency. Override `labels()` to supply custom mappings keyed by case name. Falls back to the case name when no label is defined.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\TranslatableTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\TranslatableTrait;
|
|
|
|
|
|
|
|
|
|
enum UserRole
|
|
|
|
|
{
|
|
|
|
@@ -280,7 +287,7 @@ UserRole::labelsArray();
|
|
|
|
|
Collection-style selection helpers. Can be combined with `EnumTrait` or `BackedEnumTrait`. Works with any enum type.
|
|
|
|
|
|
|
|
|
|
```php
|
|
|
|
|
use Tez\Utils\Enum\EnumCollectionTrait;
|
|
|
|
|
use Tezmanian\Utils\Enum\EnumCollectionTrait;
|
|
|
|
|
|
|
|
|
|
enum Suit
|
|
|
|
|
{
|
|
|
|
@@ -359,6 +366,15 @@ enum Permission: int
|
|
|
|
|
- PHP 8.3+
|
|
|
|
|
- No runtime dependencies
|
|
|
|
|
|
|
|
|
|
## Development
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make build && make install
|
|
|
|
|
make ci # audit, PHPStan, code style, tests
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
MIT
|
|
|
|
|
MIT — see [LICENSE](LICENSE).
|
|
|
|
|
|
|
|
|
|
Author: René Halberstadt
|
|
|
|
|