12
12
13
13
namespace ServiceBus \Transport \Amqp ;
14
14
15
- use ServiceBus \Transport \Common \Exceptions \InvalidConnectionParameters ;
15
+ use function ServiceBus \Transport \Common \parseConnectionDSN ;
16
+ use function ServiceBus \Transport \Common \parseConnectionQuery ;
16
17
17
18
/**
18
19
* Amqp connection details.
19
20
*/
20
21
final class AmqpConnectionConfiguration
21
22
{
22
- private const DEFAULT_SCHEMA = 'amqp ' ;
23
-
24
23
private const DEFAULT_HOST = 'localhost ' ;
25
24
26
25
private const DEFAULT_PORT = 5672 ;
@@ -58,7 +57,7 @@ final class AmqpConnectionConfiguration
58
57
/**
59
58
* @psalm-param non-empty-string $connectionDSN DSN example: amqp://user:password@host:port
60
59
*
61
- * @throws \ServiceBus\Transport\Common\Exceptions\InvalidConnectionParameters Incorrect DSN
60
+ * @throws \ServiceBus\Transport\Common\Exceptions\IncorrectConnectionParameters Incorrect DSN
62
61
*/
63
62
public function __construct (string $ connectionDSN )
64
63
{
@@ -86,6 +85,8 @@ public function __toString(): string
86
85
}
87
86
88
87
/**
88
+ * @psalm-param non-empty-string $connectionDSN
89
+ *
89
90
* @psalm-return array{
90
91
* scheme:string,
91
92
* user:string,
@@ -97,63 +98,30 @@ public function __toString(): string
97
98
* heartbeat:int
98
99
* }
99
100
*
100
- * @throws \ServiceBus\Transport\Common\Exceptions\InvalidConnectionParameters Incorrect DSN
101
+ * @throws \ServiceBus\Transport\Common\Exceptions\IncorrectConnectionParameters
101
102
*/
102
103
private static function extractConnectionParameters (string $ connectionDSN ): array
103
104
{
104
- $ connectionParts = self ::parseUrl ($ connectionDSN );
105
-
106
- $ queryString = (string ) ($ connectionParts ['query ' ] ?? '' );
105
+ $ connectionParts = parseConnectionDSN ($ connectionDSN );
107
106
108
- $ queryParts = self ::parseQuery ($ queryString );
107
+ /**
108
+ * @psalm-var array{
109
+ * timeout:numeric-string|null,
110
+ * vhost:non-empty-string|null,
111
+ * heartbeat:numeric-string|null
112
+ * } $parsedQuery
113
+ */
114
+ $ parsedQuery = parseConnectionQuery ($ connectionParts ['query ' ] ?? '' );
109
115
110
116
return [
111
- 'scheme ' => ( string ) ( $ connectionParts ['scheme ' ] ?? self :: DEFAULT_SCHEMA ) ,
112
- 'host ' => ( string ) ( $ connectionParts ['host ' ] ?? self ::DEFAULT_HOST ) ,
113
- 'port ' => ( int ) ( $ connectionParts ['port ' ] ?? self ::DEFAULT_PORT ) ,
114
- 'user ' => ( string ) ( $ connectionParts ['user ' ] ?? self ::DEFAULT_USERNAME ) ,
115
- 'password ' => ( string ) ( $ connectionParts ['pass ' ] ?? self ::DEFAULT_PASSWORD ) ,
116
- 'timeout ' => (int ) ($ queryParts ['timeout ' ] ?? self ::DEFAULT_TIMEOUT ),
117
- 'vhost ' => ( string ) ( $ queryParts ['vhost ' ] ?? self ::DEFAULT_VIRTUAL_HOST ) ,
118
- 'heartbeat ' => (int ) ($ queryParts ['heartbeat ' ] ?? self ::DEFAULT_HEARTBEAT_INTERVAL ),
117
+ 'scheme ' => $ connectionParts ['scheme ' ],
118
+ 'host ' => $ connectionParts ['host ' ] ?? self ::DEFAULT_HOST ,
119
+ 'port ' => $ connectionParts ['port ' ] ?? self ::DEFAULT_PORT ,
120
+ 'user ' => $ connectionParts ['user ' ] ?? self ::DEFAULT_USERNAME ,
121
+ 'password ' => $ connectionParts ['pass ' ] ?? self ::DEFAULT_PASSWORD ,
122
+ 'timeout ' => (int ) ($ parsedQuery ['timeout ' ] ?? self ::DEFAULT_TIMEOUT ),
123
+ 'vhost ' => $ parsedQuery ['vhost ' ] ?? self ::DEFAULT_VIRTUAL_HOST ,
124
+ 'heartbeat ' => (int ) ($ parsedQuery ['heartbeat ' ] ?? self ::DEFAULT_HEARTBEAT_INTERVAL ),
119
125
];
120
126
}
121
-
122
- /**
123
- * Parse connection DSN parts.
124
- *
125
- * @throws \ServiceBus\Transport\Common\Exceptions\InvalidConnectionParameters Incorrect DSN
126
- */
127
- private static function parseUrl (string $ url ): array
128
- {
129
- if ($ url === '' )
130
- {
131
- throw InvalidConnectionParameters::emptyDSN ();
132
- }
133
-
134
- $ parsedParts = \parse_url ($ url );
135
-
136
- if ($ parsedParts !== false )
137
- {
138
- return $ parsedParts ;
139
- }
140
-
141
- throw InvalidConnectionParameters::incorrectDSN ($ url );
142
- }
143
-
144
- /**
145
- * Parse url query parts.
146
- *
147
- * @psalm-return array<string, string|int|float>
148
- */
149
- private static function parseQuery (string $ query ): array
150
- {
151
- $ output = [];
152
-
153
- \parse_str ($ query , $ output );
154
-
155
- /** @psalm-var array<string, string|int|float> $output */
156
-
157
- return $ output ;
158
- }
159
127
}
0 commit comments