Skip to content

Commit d1cca19

Browse files
committed
feat(scala): endpoint level timeout
1 parent 10014c2 commit d1cca19

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

clients/algoliasearch-client-scala/src/main/scala/algoliasearch/config/RequestOptions.scala

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,27 @@ import scala.concurrent.duration.Duration
1616
* HTTP read timeout
1717
* @param writeTimeout
1818
* HTTP write timeout
19+
* @param connectTimeout
20+
* HTTP connect timeout
1921
*/
2022
case class RequestOptions(
2123
headers: Map[String, String] = Map.empty,
2224
queryParameters: Map[String, String] = Map.empty,
2325
readTimeout: Option[Duration] = None,
24-
writeTimeout: Option[Duration] = None
25-
)
26+
writeTimeout: Option[Duration] = None,
27+
connectTimeout: Option[Duration] = None
28+
) {
29+
def +(other: Option[RequestOptions]): RequestOptions = {
30+
val some = other.getOrElse(return this)
31+
new RequestOptions(
32+
headers = this.headers ++ some.headers,
33+
queryParameters = this.queryParameters ++ some.queryParameters,
34+
readTimeout = some.readTimeout.orElse(this.readTimeout),
35+
writeTimeout = some.writeTimeout.orElse(this.writeTimeout),
36+
connectTimeout = some.connectTimeout.orElse(this.connectTimeout)
37+
)
38+
}
39+
}
2640

2741
object RequestOptions {
2842

@@ -33,6 +47,7 @@ object RequestOptions {
3347
private val queryParameters: mutable.Map[String, String] = mutable.Map()
3448
private var readTimeout: Option[Duration] = None
3549
private var writeTimeout: Option[Duration] = None
50+
private var connectTimeout: Option[Duration] = None
3651

3752
/** Adds a header to the request.
3853
*/
@@ -62,14 +77,22 @@ object RequestOptions {
6277
this
6378
}
6479

80+
/** Sets the write timeout for the request.
81+
*/
82+
def withConnectTimeout(connectTimeout: Option[Duration]): Builder = {
83+
this.connectTimeout = connectTimeout
84+
this
85+
}
86+
6587
/** Builds the [[RequestOptions]].
6688
*/
6789
def build(): RequestOptions = {
6890
RequestOptions(
6991
headers = headers.toMap,
7092
queryParameters = queryParameters.toMap,
7193
readTimeout = readTimeout,
72-
writeTimeout = writeTimeout
94+
writeTimeout = writeTimeout,
95+
connectTimeout = connectTimeout
7396
)
7497
}
7598
}

clients/algoliasearch-client-scala/src/main/scala/algoliasearch/internal/HttpRequester.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ private[algoliasearch] class HttpRequester private (
115115
requestOptions.foreach(options => {
116116
options.readTimeout.foreach(timeout => builder.readTimeout(timeout.toMillis, TimeUnit.MILLISECONDS))
117117
options.writeTimeout.foreach(timeout => builder.writeTimeout(timeout.toMillis, TimeUnit.MILLISECONDS))
118+
options.connectTimeout.foreach(timeout => builder.connectTimeout(timeout.toMillis, TimeUnit.MILLISECONDS))
118119
})
119120
builder.build
120121
}

generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.algolia.codegen;
22

33
import com.algolia.codegen.exceptions.GeneratorException;
4+
import com.algolia.codegen.lambda.ToSecondsLambda;
45
import com.algolia.codegen.utils.*;
6+
import com.google.common.collect.ImmutableMap;
57
import com.samskivert.mustache.Mustache;
68
import io.swagger.v3.oas.models.OpenAPI;
79
import io.swagger.v3.oas.models.Operation;
@@ -91,6 +93,11 @@ public void processOpts() {
9193
}
9294
}
9395

96+
@Override
97+
protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
98+
return super.addMustacheLambdas().put("toSeconds", new ToSecondsLambda());
99+
}
100+
94101
/** Convert a Seq type to a valid class name. */
95102
private String typeToName(String content) {
96103
return content.trim().replace("[", "Of").replace("]", "").replace(".", "").replace(", ", "");

templates/scala/api.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class {{classname}}(
151151
{{#vendorExtensions.x-use-read-transporter}}.withRead(true){{/vendorExtensions.x-use-read-transporter}}
152152
{{#vendorExtensions}}{{#queryParams}}{{^x-is-custom-request}}.withQueryParameter("{{baseName}}", {{paramName}}){{/x-is-custom-request}}{{#x-is-custom-request}}.withQueryParameters(parameters){{/x-is-custom-request}}{{/queryParams}}{{/vendorExtensions}}
153153
.build()
154-
execute[{{#vendorExtensions}}{{#x-is-custom-request}}T{{/x-is-custom-request}}{{^x-is-custom-request}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/x-is-custom-request}}{{/vendorExtensions}}](request, requestOptions)
154+
execute[{{#vendorExtensions}}{{#x-is-custom-request}}T{{/x-is-custom-request}}{{^x-is-custom-request}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/x-is-custom-request}}{{/vendorExtensions}}](request, {{#vendorExtensions.x-timeouts}}Some(RequestOptions(writeTimeout = Some(Duration({{#lambda.toSeconds}}{{{write}}}{{/lambda.toSeconds}}, TimeUnit.SECONDS)), readTimeout = Some(Duration({{#lambda.toSeconds}}{{{read}}}{{/lambda.toSeconds}}, TimeUnit.SECONDS)), connectTimeout = Some(Duration({{#lambda.toSeconds}}{{{connect}}}{{/lambda.toSeconds}}, TimeUnit.SECONDS))) + {{/vendorExtensions.x-timeouts}}requestOptions{{#vendorExtensions.x-timeouts}}){{/vendorExtensions.x-timeouts}})
155155
}
156156

157157
{{/operation}}

0 commit comments

Comments
 (0)