* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace GrahamCampbell\ResultType; use PhpOption\None; use PhpOption\Some; /** * @template T * @template E * @extends \GrahamCampbell\ResultType\Result */ final class Success extends Result { /** * @var T */ private $value; /** * Internal constructor for a success value. * * @param T $value * * @return void */ private function __construct($value) { $this->value = $value; } /** * Create a new error value. * * @template S * * @param S $value * * @return \GrahamCampbell\ResultType\Result */ public static function create($value) { return new self($value); } /** * Get the success option value. * * @return \PhpOption\Option */ public function success() { return Some::create($this->value); } /** * Map over the success value. * * @template S * * @param callable(T):S $f * * @return \GrahamCampbell\ResultType\Result */ public function map(callable $f) { return self::create($f($this->value)); } /** * Flat map over the success value. * * @template S * @template F * * @param callable(T):\GrahamCampbell\ResultType\Result $f * * @return \GrahamCampbell\ResultType\Result */ public function flatMap(callable $f) { return $f($this->value); } /** * Get the error option value. * * @return \PhpOption\Option */ public function error() { return None::create(); } /** * Map over the error value. * * @template F * * @param callable(E):F $f * * @return \GrahamCampbell\ResultType\Result */ public function mapError(callable $f) { return self::create($this->value); } }