prewk / result
Result object for PHP inspired by Rust
Installs: 490 001
Dependents: 10
Suggesters: 0
Security: 0
Stars: 104
Watchers: 7
Forks: 12
Open Issues: 9
Requires
- php: >=8.1.0
- prewk/option: >= 1.3.0
Requires (Dev)
- ergebnis/composer-normalize: 2.42.0
- infection/infection: 0.27.11
- phpunit/phpunit: 10.5.15
- psalm/plugin-phpunit: 0.19.0
- symplify/easy-coding-standard: 12.1.14
- vimeo/psalm: 5.24.0
- dev-master
- 4.0.0
- 3.3.0
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.0
- 2.1.1
- 2.1.0
- 2.0.0
- 1.2.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-dependabot/composer/symplify/easy-coding-standard-12.3.4
- dev-dependabot/github_actions/shivammathur/setup-php-2.31.1
- dev-dependabot/composer/phpunit/phpunit-10.5.26
- dev-dependabot/composer/vimeo/psalm-5.25.0
- dev-dependabot/composer/ergebnis/composer-normalize-2.43.0
- dev-dependabot/github_actions/actions/checkout-4.1.7
- dev-dependabot/github_actions/coverallsapp/github-action-2.3.0
- dev-dependabot/composer/guzzlehttp/psr7-2.5.0
- dev-dependabot/composer/guzzlehttp/guzzle-7.4.5
This package is auto-updated.
Last update: 2024-10-31 09:26:17 UTC
README
A PHP implementation of Rust's Result type with roughly the same API.
Version information
Version 4.x.x requires PHP 8.1.0+. Make sure you match the versions for this and the Option library if you use both.
Installation
composer require prewk/result
Overview
use Prewk\Result; use Prewk\Result\{Ok, Err}; function someApiCall(): Result { // ... if ($apiCallSuccesful) { return new Ok($results); } else { return new Err($error); } } function anotherApiCall(): Result { // ... if ($apiCallSuccesful) { return new Ok($results); } else { return new Err($error); } } // Fallback to value $value = someApiCall()->unwrapOr(null); // Fallback to result and throw an exception if both fail $value = someApiCall()->orElse(function($err) { return anotherApiCall(); })->unwrap(); // Throw custom exception on error $value = someApiCall()->expect(new Exception("Oh noes!"));
Helpers
Optional global helper functions exist to simplify result object construction:
ok(); // new Prewk\Result\Ok(null); ok($val); // new Prewk\Result\Ok($val); err($e); // new Prewk\Result\Err($e);
Add the following to your composer.json
:
{ "autoload": { "files": ["vendor/prewk/result/helpers.php"] } }
API deviations from Rust
Exceptions
If an Err containing an Exception
is unwrapped, that Exception will be thrown. Otherwise a generic ResultException
will be thrown.
Gotchas
Note that or
and and
will be evaluated immediately:
// This will call all three api calls regardless of successes/errors $this ->apiCall() ->or(anotherApiCall()) ->and(thirdApiCall());
See andThen
and orElse
for lazy evaluation.
License
MIT & Apache 2.0