1212use Amp \Socket \TlsInfo ;
1313use function Amp \Http \Client \processRequest ;
1414
15+ /**
16+ * @psalm-type RequestCallbackType = callable(Request, Cancellation, HttpStream):Response
17+ * @psalm-type ReleaseCallbackType = callable():void
18+ */
1519final class HttpStream implements Stream
1620{
1721 use ForbidSerialization;
1822 use ForbidCloning;
1923
24+ /**
25+ * @param RequestCallbackType $RequestCallbackType
26+ * @param ReleaseCallbackType $ReleaseCallbackType
27+ */
2028 public static function fromConnection (
2129 Connection $ connection ,
22- callable $ requestCallback ,
23- callable $ releaseCallback
30+ callable $ RequestCallbackType ,
31+ callable $ ReleaseCallbackType
2432 ): self {
2533 return new self (
2634 $ connection ->getLocalAddress (),
2735 $ connection ->getRemoteAddress (),
2836 $ connection ->getTlsInfo (),
29- $ requestCallback ,
30- $ releaseCallback
37+ $ RequestCallbackType ,
38+ $ ReleaseCallbackType ,
3139 );
3240 }
3341
34- public static function fromStream (Stream $ stream , callable $ requestCallback , callable $ releaseCallback ): self
42+ /**
43+ * @param RequestCallbackType $RequestCallbackType
44+ * @param ReleaseCallbackType $ReleaseCallbackType
45+ */
46+ public static function fromStream (Stream $ stream , callable $ RequestCallbackType , callable $ ReleaseCallbackType ): self
3547 {
3648 return new self (
3749 $ stream ->getLocalAddress (),
3850 $ stream ->getRemoteAddress (),
3951 $ stream ->getTlsInfo (),
40- $ requestCallback ,
41- $ releaseCallback
52+ $ RequestCallbackType ,
53+ $ ReleaseCallbackType ,
4254 );
4355 }
4456
45- private SocketAddress $ localAddress ;
46-
47- private SocketAddress $ remoteAddress ;
48-
49- private ?TlsInfo $ tlsInfo ;
50-
5157 /** @var callable */
52- private $ requestCallback ;
58+ private $ RequestCallbackType ;
5359
5460 /** @var callable|null */
55- private $ releaseCallback ;
61+ private $ ReleaseCallbackType ;
5662
63+ /**
64+ * @param RequestCallbackType $RequestCallbackType
65+ * @param ReleaseCallbackType $ReleaseCallbackType
66+ */
5767 private function __construct (
58- SocketAddress $ localAddress ,
59- SocketAddress $ remoteAddress ,
60- ?TlsInfo $ tlsInfo ,
61- callable $ requestCallback ,
62- callable $ releaseCallback
68+ private readonly SocketAddress $ localAddress ,
69+ private readonly SocketAddress $ remoteAddress ,
70+ private readonly ?TlsInfo $ tlsInfo ,
71+ callable $ RequestCallbackType ,
72+ callable $ ReleaseCallbackType ,
6373 ) {
64- $ this ->localAddress = $ localAddress ;
65- $ this ->remoteAddress = $ remoteAddress ;
66- $ this ->tlsInfo = $ tlsInfo ;
67- $ this ->requestCallback = $ requestCallback ;
68- $ this ->releaseCallback = $ releaseCallback ;
74+ $ this ->RequestCallbackType = $ RequestCallbackType ;
75+ $ this ->ReleaseCallbackType = $ ReleaseCallbackType ;
6976 }
7077
7178 public function __destruct ()
7279 {
73- if ($ this ->releaseCallback !== null ) {
74- ($ this ->releaseCallback )();
80+ if ($ this ->ReleaseCallbackType !== null ) {
81+ ($ this ->ReleaseCallbackType )();
7582 }
7683 }
7784
@@ -80,13 +87,13 @@ public function __destruct()
8087 */
8188 public function request (Request $ request , Cancellation $ cancellation ): Response
8289 {
83- if ($ this ->releaseCallback === null ) {
90+ if ($ this ->ReleaseCallbackType === null ) {
8491 throw new \Error ('A stream may only be used for a single request ' );
8592 }
8693
87- $ this ->releaseCallback = null ;
94+ $ this ->ReleaseCallbackType = null ;
8895
89- return processRequest ($ request , [], fn (): Response => ($ this ->requestCallback )($ request , $ cancellation , $ this ));
96+ return processRequest ($ request , [], fn (): Response => ($ this ->RequestCallbackType )($ request , $ cancellation , $ this ));
9097 }
9198
9299 public function getLocalAddress (): SocketAddress
0 commit comments