From aeea032ef889af0b5345776a5b85575f1ce94682 Mon Sep 17 00:00:00 2001 From: Baptiste Langlade Date: Sun, 15 Feb 2026 16:56:17 +0100 Subject: [PATCH] replace Maybes by Attempts --- CHANGELOG.md | 1 + src/Manager.php | 14 +++++++------- src/Manager/Native.php | 38 ++++++++++++++++++++------------------ 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a40716..c683e40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Requires PHP `8.4` - Requires `innmind/foundation:~2.1` +- `Innmind\HttpSession\Manager::start()`, `::save()` and `::close()` now return a `Innmind\Immutable\Attempt` ## 4.1.0 - 2025-07-30 diff --git a/src/Manager.php b/src/Manager.php index 7774cf0..88496ca 100644 --- a/src/Manager.php +++ b/src/Manager.php @@ -5,27 +5,27 @@ use Innmind\Http\ServerRequest; use Innmind\Immutable\{ - Maybe, + Attempt, SideEffect, }; interface Manager { /** - * @return Maybe + * @return Attempt */ #[\NoDiscard] - public function start(ServerRequest $request): Maybe; + public function start(ServerRequest $request): Attempt; /** - * @return Maybe + * @return Attempt */ #[\NoDiscard] - public function save(Session $session): Maybe; + public function save(Session $session): Attempt; /** - * @return Maybe + * @return Attempt */ #[\NoDiscard] - public function close(Session $session): Maybe; + public function close(Session $session): Attempt; } diff --git a/src/Manager/Native.php b/src/Manager/Native.php index b379af2..13cfa6f 100644 --- a/src/Manager/Native.php +++ b/src/Manager/Native.php @@ -17,6 +17,7 @@ use Innmind\Url\Path; use Innmind\Immutable\{ Map, + Attempt, Maybe, SideEffect, }; @@ -39,18 +40,18 @@ public static function of(?Path $save = null): self } #[\Override] - public function start(ServerRequest $request): Maybe + public function start(ServerRequest $request): Attempt { if ($this->session instanceof Id) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \LogicException('Session already started')); } $this->configureSessionId($request); if (\session_start(['use_cookies' => false]) === false) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \RuntimeException('Failed to start session')); } /** @var Map */ @@ -77,15 +78,16 @@ public function start(ServerRequest $request): Maybe $this->session = $session->id(); return $session; - }); + }) + ->attempt(static fn() => new \RuntimeException('Session id or name is invalid')); } #[\Override] - public function save(Session $session): Maybe + public function save(Session $session): Attempt { if ($this->session !== $session->id()) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \LogicException('Trying to save a different session than the started one')); } $_ = $session @@ -96,32 +98,32 @@ public function save(Session $session): Maybe }); if (\session_write_close() === false) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \RuntimeException('Failed to persist the session data')); } $this->session = null; $_SESSION = []; - return Maybe::just(SideEffect::identity); + return Attempt::result(SideEffect::identity); } #[\Override] - public function close(Session $session): Maybe + public function close(Session $session): Attempt { if ($this->session !== $session->id()) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \LogicException('Trying to close a different session than the started one')); } if (\session_destroy() === false) { - /** @var Maybe */ - return Maybe::nothing(); + /** @var Attempt */ + return Attempt::error(new \RuntimeException('Failed to close the session')); } $this->session = null; - return Maybe::just(SideEffect::identity); + return Attempt::result(SideEffect::identity); } private function configureSessionId(ServerRequest $request): void