Files
lucent-laravel/src/Support/Result/Error.php
T

112 lines
1.8 KiB
PHP
Raw Normal View History

2024-03-23 12:12:13 +02:00
<?php
namespace Lucent\Support\Result;
use PhpOption\None;
use PhpOption\Option;
use PhpOption\Some;
/**
* @template T
* @template E
*
* @extends Result<T,E>
*/
final class Error extends Result
{
/**
* @var E
*/
private $value;
/**
* Internal constructor for an error value.
*
* @param E $value
*
* @return void
*/
private function __construct($value)
{
$this->value = $value;
}
/**
* Create a new error value.
*
* @template F
*
* @param F $value
*
* @return Result<T,F>
*/
public static function create($value): Result
{
return new self($value);
}
/**
* Get the success option value.
*
* @return Option<T>
*/
public function success(): Option
{
return None::create();
}
/**
* Map over the success value.
*
* @template S
*
* @param callable(T):S $f
*
* @return Result<S,E>
*/
public function map(callable $f): Result
{
return self::create($this->value);
}
/**
* Flat map over the success value.
*
* @template S
* @template F
*
* @param callable(T):Result<S,F> $f
*
* @return Result<S,F>
*/
public function flatMap(callable $f): Result
{
/* @var Result<S,F> */
return self::create($this->value);
}
/**
* Get the error option value.
*
* @return Option<E>
*/
public function error(): Option
{
return Some::create($this->value);
}
/**
* Map over the error value.
*
* @template F
*
* @param callable(E):F $f
*
* @return Result<T,F>
*/
public function mapError(callable $f): Result
{
return self::create($f($this->value));
}
}