1717use Innmind \Url \Path ;
1818use 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