Skip to content

Commit 8400376

Browse files
authored
Merge pull request #15 from Innmind/replace-maybe-by-attempt
Replace `Maybe`s by `Attempt`s
2 parents 39deac8 + aeea032 commit 8400376

3 files changed

Lines changed: 28 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- Requires PHP `8.4`
88
- Requires `innmind/foundation:~2.1`
9+
- `Innmind\HttpSession\Manager::start()`, `::save()` and `::close()` now return a `Innmind\Immutable\Attempt`
910

1011
## 4.1.0 - 2025-07-30
1112

src/Manager.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@
55

66
use Innmind\Http\ServerRequest;
77
use Innmind\Immutable\{
8-
Maybe,
8+
Attempt,
99
SideEffect,
1010
};
1111

1212
interface Manager
1313
{
1414
/**
15-
* @return Maybe<Session>
15+
* @return Attempt<Session>
1616
*/
1717
#[\NoDiscard]
18-
public function start(ServerRequest $request): Maybe;
18+
public function start(ServerRequest $request): Attempt;
1919

2020
/**
21-
* @return Maybe<SideEffect>
21+
* @return Attempt<SideEffect>
2222
*/
2323
#[\NoDiscard]
24-
public function save(Session $session): Maybe;
24+
public function save(Session $session): Attempt;
2525

2626
/**
27-
* @return Maybe<SideEffect>
27+
* @return Attempt<SideEffect>
2828
*/
2929
#[\NoDiscard]
30-
public function close(Session $session): Maybe;
30+
public function close(Session $session): Attempt;
3131
}

src/Manager/Native.php

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Innmind\Url\Path;
1818
use Innmind\Immutable\{
1919
Map,
20+
Attempt,
2021
Maybe,
2122
SideEffect,
2223
};
@@ -39,18 +40,18 @@ public static function of(?Path $save = null): self
3940
}
4041

4142
#[\Override]
42-
public function start(ServerRequest $request): Maybe
43+
public function start(ServerRequest $request): Attempt
4344
{
4445
if ($this->session instanceof Id) {
45-
/** @var Maybe<Session> */
46-
return Maybe::nothing();
46+
/** @var Attempt<Session> */
47+
return Attempt::error(new \LogicException('Session already started'));
4748
}
4849

4950
$this->configureSessionId($request);
5051

5152
if (\session_start(['use_cookies' => false]) === false) {
52-
/** @var Maybe<Session> */
53-
return Maybe::nothing();
53+
/** @var Attempt<Session> */
54+
return Attempt::error(new \RuntimeException('Failed to start session'));
5455
}
5556

5657
/** @var Map<string, mixed> */
@@ -77,15 +78,16 @@ public function start(ServerRequest $request): Maybe
7778
$this->session = $session->id();
7879

7980
return $session;
80-
});
81+
})
82+
->attempt(static fn() => new \RuntimeException('Session id or name is invalid'));
8183
}
8284

8385
#[\Override]
84-
public function save(Session $session): Maybe
86+
public function save(Session $session): Attempt
8587
{
8688
if ($this->session !== $session->id()) {
87-
/** @var Maybe<SideEffect> */
88-
return Maybe::nothing();
89+
/** @var Attempt<SideEffect> */
90+
return Attempt::error(new \LogicException('Trying to save a different session than the started one'));
8991
}
9092

9193
$_ = $session
@@ -96,32 +98,32 @@ public function save(Session $session): Maybe
9698
});
9799

98100
if (\session_write_close() === false) {
99-
/** @var Maybe<SideEffect> */
100-
return Maybe::nothing();
101+
/** @var Attempt<SideEffect> */
102+
return Attempt::error(new \RuntimeException('Failed to persist the session data'));
101103
}
102104

103105
$this->session = null;
104106
$_SESSION = [];
105107

106-
return Maybe::just(SideEffect::identity);
108+
return Attempt::result(SideEffect::identity);
107109
}
108110

109111
#[\Override]
110-
public function close(Session $session): Maybe
112+
public function close(Session $session): Attempt
111113
{
112114
if ($this->session !== $session->id()) {
113-
/** @var Maybe<SideEffect> */
114-
return Maybe::nothing();
115+
/** @var Attempt<SideEffect> */
116+
return Attempt::error(new \LogicException('Trying to close a different session than the started one'));
115117
}
116118

117119
if (\session_destroy() === false) {
118-
/** @var Maybe<SideEffect> */
119-
return Maybe::nothing();
120+
/** @var Attempt<SideEffect> */
121+
return Attempt::error(new \RuntimeException('Failed to close the session'));
120122
}
121123

122124
$this->session = null;
123125

124-
return Maybe::just(SideEffect::identity);
126+
return Attempt::result(SideEffect::identity);
125127
}
126128

127129
private function configureSessionId(ServerRequest $request): void

0 commit comments

Comments
 (0)