Skip to content

Commit 2f3b36f

Browse files
shortcutstechouse
andauthored
feat(dart): add Dio HttpClientAdapter to ClientOptions (#3326)
Co-authored-by: Klemen Tušar <[email protected]>
1 parent e7fd2dc commit 2f3b36f

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

clients/algoliasearch-client-dart/packages/client_core/lib/src/config/client_options.dart

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,23 @@ final class ClientOptions {
3434
/// Used only in case of using the default (dio) requester.
3535
final Iterable<Interceptor>? interceptors;
3636

37+
/// Custom [HttpClientAdapter] used to send HTTP requests.
38+
/// Used only in case of using the default (dio) requester.
39+
final HttpClientAdapter? httpClientAdapter;
40+
3741
/// Constructs a [ClientOptions] instance with the provided parameters.
38-
const ClientOptions(
39-
{this.connectTimeout = const Duration(seconds: 2),
40-
this.writeTimeout = const Duration(seconds: 30),
41-
this.readTimeout = const Duration(seconds: 5),
42-
this.hosts,
43-
this.headers,
44-
this.agentSegments,
45-
this.requester,
46-
this.logger,
47-
this.interceptors});
42+
const ClientOptions({
43+
this.connectTimeout = const Duration(seconds: 2),
44+
this.writeTimeout = const Duration(seconds: 30),
45+
this.readTimeout = const Duration(seconds: 5),
46+
this.hosts,
47+
this.headers,
48+
this.agentSegments,
49+
this.requester,
50+
this.logger,
51+
this.interceptors,
52+
this.httpClientAdapter,
53+
});
4854

4955
@override
5056
bool operator ==(Object other) =>
@@ -59,7 +65,8 @@ final class ClientOptions {
5965
agentSegments == other.agentSegments &&
6066
logger == other.logger &&
6167
requester == other.requester &&
62-
interceptors == other.interceptors;
68+
interceptors == other.interceptors &&
69+
httpClientAdapter == other.httpClientAdapter;
6370

6471
@override
6572
int get hashCode =>
@@ -71,10 +78,11 @@ final class ClientOptions {
7178
agentSegments.hashCode ^
7279
logger.hashCode ^
7380
requester.hashCode ^
74-
interceptors.hashCode;
81+
interceptors.hashCode ^
82+
httpClientAdapter.hashCode;
7583

7684
@override
7785
String toString() {
78-
return 'ClientOptions{hosts: $hosts, connectTimeout: $connectTimeout, writeTimeout: $writeTimeout, readTimeout: $readTimeout, headers: $headers, agentSegments: $agentSegments, logger: $logger, requester: $requester, interceptors: $interceptors}';
86+
return 'ClientOptions{hosts: $hosts, connectTimeout: $connectTimeout, writeTimeout: $writeTimeout, readTimeout: $readTimeout, headers: $headers, agentSegments: $agentSegments, logger: $logger, requester: $requester, interceptors: $interceptors, httpClientAdapter: $httpClientAdapter}';
7987
}
8088
}

clients/algoliasearch-client-dart/packages/client_core/lib/src/transport/dio/dio_requester.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class DioRequester implements Requester {
2727
Iterable<AgentSegment>? clientSegments,
2828
Function(Object?)? logger,
2929
Iterable<Interceptor>? interceptors,
30+
HttpClientAdapter? httpClientAdapter,
3031
}) : _client = Dio(
3132
BaseOptions(
3233
headers: headers,
@@ -49,7 +50,11 @@ class DioRequester implements Requester {
4950
logPrint: logger,
5051
),
5152
if (interceptors != null) ...interceptors,
52-
]);
53+
]) {
54+
if (httpClientAdapter != null) {
55+
_client.httpClientAdapter = httpClientAdapter;
56+
}
57+
}
5358

5459
@override
5560
Future<HttpResponse> perform(HttpRequest request) async {

clients/algoliasearch-client-dart/packages/client_core/lib/src/transport/retry_strategy.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ final class RetryStrategy {
3939
clientSegments: [segment, ...?options.agentSegments],
4040
logger: options.logger,
4141
interceptors: options.interceptors,
42+
httpClientAdapter: options.httpClientAdapter,
4243
),
4344
);
4445

0 commit comments

Comments
 (0)