Skip to content

Commit 7c80eb2

Browse files
refactor(internal): polish ClientOptions (#368)
1 parent 0dbf994 commit 7c80eb2

1 file changed

Lines changed: 22 additions & 32 deletions

File tree

lithic-java-core/src/main/kotlin/com/lithic/api/core/ClientOptions.kt

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ private constructor(
1717
@get:JvmName("jsonMapper") val jsonMapper: JsonMapper,
1818
@get:JvmName("clock") val clock: Clock,
1919
@get:JvmName("baseUrl") val baseUrl: String,
20-
@get:JvmName("apiKey") val apiKey: String,
21-
@get:JvmName("webhookSecret") val webhookSecret: String?,
2220
@get:JvmName("headers") val headers: ListMultimap<String, String>,
2321
@get:JvmName("queryParams") val queryParams: ListMultimap<String, String>,
2422
@get:JvmName("responseValidation") val responseValidation: Boolean,
2523
@get:JvmName("maxRetries") val maxRetries: Int,
24+
@get:JvmName("apiKey") val apiKey: String,
25+
@get:JvmName("webhookSecret") val webhookSecret: String?,
2626
) {
2727

2828
fun toBuilder() = Builder().from(this)
@@ -41,11 +41,11 @@ private constructor(
4141
class Builder {
4242

4343
private var httpClient: HttpClient? = null
44-
private var jsonMapper: JsonMapper? = null
44+
private var jsonMapper: JsonMapper = jsonMapper()
4545
private var clock: Clock = Clock.systemUTC()
4646
private var baseUrl: String = PRODUCTION_URL
47-
private var headers: MutableMap<String, MutableList<String>> = mutableMapOf()
48-
private var queryParams: MutableMap<String, MutableList<String>> = mutableMapOf()
47+
private var headers: ListMultimap<String, String> = ArrayListMultimap.create()
48+
private var queryParams: ListMultimap<String, String> = ArrayListMultimap.create()
4949
private var responseValidation: Boolean = false
5050
private var maxRetries: Int = 2
5151
private var apiKey: String? = null
@@ -57,14 +57,8 @@ private constructor(
5757
jsonMapper = clientOptions.jsonMapper
5858
clock = clientOptions.clock
5959
baseUrl = clientOptions.baseUrl
60-
headers =
61-
clientOptions.headers.asMap().mapValuesTo(mutableMapOf()) { (_, value) ->
62-
value.toMutableList()
63-
}
64-
queryParams =
65-
clientOptions.queryParams.asMap().mapValuesTo(mutableMapOf()) { (_, value) ->
66-
value.toMutableList()
67-
}
60+
headers = ArrayListMultimap.create(clientOptions.headers)
61+
queryParams = ArrayListMultimap.create(clientOptions.queryParams)
6862
responseValidation = clientOptions.responseValidation
6963
maxRetries = clientOptions.maxRetries
7064
apiKey = clientOptions.apiKey
@@ -75,47 +69,43 @@ private constructor(
7569

7670
fun jsonMapper(jsonMapper: JsonMapper) = apply { this.jsonMapper = jsonMapper }
7771

78-
fun baseUrl(baseUrl: String) = apply { this.baseUrl = baseUrl }
79-
8072
fun clock(clock: Clock) = apply { this.clock = clock }
8173

74+
fun baseUrl(baseUrl: String) = apply { this.baseUrl = baseUrl }
75+
8276
fun headers(headers: Map<String, Iterable<String>>) = apply {
8377
this.headers.clear()
8478
putAllHeaders(headers)
8579
}
8680

87-
fun putHeader(name: String, value: String) = apply {
88-
this.headers.getOrPut(name) { mutableListOf() }.add(value)
89-
}
81+
fun putHeader(name: String, value: String) = apply { headers.put(name, value) }
9082

9183
fun putHeaders(name: String, values: Iterable<String>) = apply {
92-
this.headers.getOrPut(name) { mutableListOf() }.addAll(values)
84+
headers.putAll(name, values)
9385
}
9486

9587
fun putAllHeaders(headers: Map<String, Iterable<String>>) = apply {
96-
headers.forEach(this::putHeaders)
88+
headers.forEach(::putHeaders)
9789
}
9890

99-
fun removeHeader(name: String) = apply { this.headers.put(name, mutableListOf()) }
91+
fun removeHeader(name: String) = apply { headers.removeAll(name) }
10092

10193
fun queryParams(queryParams: Map<String, Iterable<String>>) = apply {
10294
this.queryParams.clear()
10395
putAllQueryParams(queryParams)
10496
}
10597

106-
fun putQueryParam(name: String, value: String) = apply {
107-
this.queryParams.getOrPut(name) { mutableListOf() }.add(value)
108-
}
98+
fun putQueryParam(name: String, value: String) = apply { queryParams.put(name, value) }
10999

110100
fun putQueryParams(name: String, values: Iterable<String>) = apply {
111-
this.queryParams.getOrPut(name) { mutableListOf() }.addAll(values)
101+
queryParams.putAll(name, values)
112102
}
113103

114104
fun putAllQueryParams(queryParams: Map<String, Iterable<String>>) = apply {
115-
queryParams.forEach(this::putQueryParams)
105+
queryParams.forEach(::putQueryParams)
116106
}
117107

118-
fun removeQueryParam(name: String) = apply { this.queryParams.put(name, mutableListOf()) }
108+
fun removeQueryParam(name: String) = apply { queryParams.removeAll(name) }
119109

120110
fun responseValidation(responseValidation: Boolean) = apply {
121111
this.responseValidation = responseValidation
@@ -149,8 +139,8 @@ private constructor(
149139
if (!apiKey.isNullOrEmpty()) {
150140
headers.put("Authorization", apiKey)
151141
}
152-
this.headers.forEach(headers::replaceValues)
153-
this.queryParams.forEach(queryParams::replaceValues)
142+
this.headers.asMap().forEach(headers::replaceValues)
143+
this.queryParams.asMap().forEach(queryParams::replaceValues)
154144

155145
return ClientOptions(
156146
httpClient!!,
@@ -161,15 +151,15 @@ private constructor(
161151
.maxRetries(maxRetries)
162152
.build()
163153
),
164-
jsonMapper ?: jsonMapper(),
154+
jsonMapper,
165155
clock,
166156
baseUrl,
167-
apiKey!!,
168-
webhookSecret,
169157
headers.toImmutable(),
170158
queryParams.toImmutable(),
171159
responseValidation,
172160
maxRetries,
161+
apiKey!!,
162+
webhookSecret,
173163
)
174164
}
175165
}

0 commit comments

Comments
 (0)