takemo101 / simple-result-type
Simple Result Type
v0.1.4
2022-06-12 00:40 UTC
Requires
- php: ^8.1
Requires (Dev)
- php: ^8.1
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
README
The Simple Result Type simply returns the processing result as an object.
Enjoy!
Example
This is a basic usage example.
use Takemo101\SimpleResultType\ { Resulter, Error, Success, }; use Exception; // Create a Success object with the Success method of the Resulter class. $data = Resulter::success(10) // Create a Result object with a new value by the map method. ->map(fn(int $result) => $result * 2) // Get the success result by the success method. ->success(); var_dump($data); // int(20) // Create an Error object with the error method of the Resulter class. $data = Resulter::error(10) // Create an Error object with a new value by the mapError method. ->mapError(fn(int $result) => $result * 2) // Get the error result by the error method. ->error(); var_dump($data); // int(20) // If you generate an Error with a value that implements Throwable, // an exception will be raised. Resulter::error(new Exception('error')) ->exception(); // You can get the output according to the result by the output method. $data = Resulter::success(10) ->map(fn(int $result) => $result * 2) ->output( success: fn(int $result) => $result * 100, error: fn(int $result) => $result * 1, ); var_dump($data); // int(2000)
This is an example of using to determine whether the result is success or error.
use Takemo101\SimpleResultType\ { Error, Success, }; // You can also create objects from the Error and Success classes. $result = Error::create('error'); var_dump($result->isError()); // bool(true) var_dump($result->isSuccess()); // bool(false) $result = Success::create('success'); // You can also judge by Type enum. $data = match ($result->type()) { Type::Success => $result->success(), Type::Error => $result->error(), }; var_dump($data); // string(7) "success"
Try operations that may fail and produce results.
use Takemo101\SimpleResultType\Resulter; use Takemo101\SimpleResultType\Support\ { CatchType, NotCatchType, }; use Exception; use LogicException; use RuntimeException; use InvalidArgumentException; // If an exception occurs, the result will be returned as Error. $result = Resulter::try(function() { throw new Exception('error'); }); // Error<Exception> // By returning the success value, the result will be returned as Success. $result = Resulter::try(function() { return 10; }); // Success<integer> // No error is output except for the exception specified in the CatchType Attribute class. $result = Resulter::try( #[CatchType( RuntimeException::class, InvalidArgumentException::class, )] function() { throw new RuntimeException('error'); } ); // Error<RuntimeException> var_dump($result->isError()); // bool(true) // No error is output for the exception specified in the NotCatchType Attribute class. Resulter::try( #[NotCatchType( RuntimeException::class, InvalidArgumentException::class, )] function() { throw new RuntimeException('error'); } ); // Exception occurs.
Exception handling by ErrorHandler class.
use Takemo101\SimpleResultType\Resulter; use Takemo101\SimpleResultType\Support\ErrorHandler; use LogicException; use RuntimeException; // If an exception occurs, the Error wrapped in the ErrorHandler class is returned. $result = Resulter::trial(function() { throw new RuntimeException('error'); }); // Error<ErrorHandler> // ErrorHandler can be used for processing according to the type of exception $data = $result->error() ->catch(fn (RuntimeException $e) => $e->getMessage()) ->catch(fn (LogicException $e) => $e->getMessage()) ->exception(); // or ->call(); var_dump($data); // string(5) "error"