112 lines
1.8 KiB
PHP
112 lines
1.8 KiB
PHP
|
|
<?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));
|
||
|
|
}
|
||
|
|
}
|