Skip to content

Commit 0fcb595

Browse files
committed
Reuse json and httpClient across web import features
1 parent 107220f commit 0fcb595

File tree

3 files changed

+41
-51
lines changed

3 files changed

+41
-51
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.composegears.valkyrie.ui.screen.webimport.common.di
2+
3+
import com.composegears.leviathan.Leviathan
4+
import io.ktor.client.HttpClient
5+
import io.ktor.client.engine.okhttp.OkHttp
6+
import io.ktor.client.plugins.HttpTimeout
7+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
8+
import io.ktor.serialization.kotlinx.json.json
9+
import kotlin.time.Duration.Companion.seconds
10+
import kotlinx.serialization.json.Json
11+
12+
object NetworkModule : Leviathan() {
13+
14+
val json by instanceOf(keepAlive = true) {
15+
Json {
16+
ignoreUnknownKeys = true
17+
isLenient = true
18+
}
19+
}
20+
21+
val httpClient by instanceOf {
22+
HttpClient(OkHttp) {
23+
install(HttpTimeout) {
24+
requestTimeoutMillis = 30.seconds.inWholeMilliseconds
25+
}
26+
install(ContentNegotiation) {
27+
json(inject(json))
28+
}
29+
}
30+
}
31+
}

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/lucide/di/LucideModule.kt

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,17 @@
11
package io.github.composegears.valkyrie.ui.screen.webimport.lucide.di
22

33
import com.composegears.leviathan.Leviathan
4+
import io.github.composegears.valkyrie.ui.screen.webimport.common.di.NetworkModule
45
import io.github.composegears.valkyrie.ui.screen.webimport.lucide.data.LucideRepository
56
import io.github.composegears.valkyrie.ui.screen.webimport.lucide.domain.LucideUseCase
6-
import io.ktor.client.HttpClient
7-
import io.ktor.client.engine.okhttp.OkHttp
8-
import io.ktor.client.plugins.HttpTimeout
9-
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
10-
import io.ktor.serialization.kotlinx.json.json
11-
import kotlin.time.Duration.Companion.seconds
12-
import kotlinx.serialization.json.Json
137

148
object LucideModule : Leviathan() {
15-
private val json by instanceOf {
16-
Json {
17-
ignoreUnknownKeys = true
18-
isLenient = true
19-
}
20-
}
21-
22-
private val httpClient by instanceOf {
23-
HttpClient(OkHttp) {
24-
install(HttpTimeout) {
25-
requestTimeoutMillis = 30.seconds.inWholeMilliseconds
26-
}
27-
install(ContentNegotiation) {
28-
json(inject(json))
29-
}
30-
}
31-
}
9+
private val network = NetworkModule
3210

3311
private val lucideRepository by instanceOf {
3412
LucideRepository(
35-
httpClient = inject(httpClient),
36-
json = inject(json),
13+
httpClient = inject(network.httpClient),
14+
json = inject(network.json),
3715
)
3816
}
3917

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/webimport/material/di/MaterialSymbolsModule.kt

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,19 @@
11
package io.github.composegears.valkyrie.ui.screen.webimport.material.di
22

33
import com.composegears.leviathan.Leviathan
4+
import io.github.composegears.valkyrie.ui.screen.webimport.common.di.NetworkModule
5+
import io.github.composegears.valkyrie.ui.screen.webimport.common.di.NetworkModule.httpClient
46
import io.github.composegears.valkyrie.ui.screen.webimport.material.data.config.MaterialSymbolsConfigRepository
57
import io.github.composegears.valkyrie.ui.screen.webimport.material.data.font.MaterialFontRepository
68
import io.github.composegears.valkyrie.ui.screen.webimport.material.domain.MaterialSymbolsConfigUseCase
7-
import io.ktor.client.HttpClient
8-
import io.ktor.client.engine.okhttp.OkHttp
9-
import io.ktor.client.plugins.HttpTimeout
10-
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
11-
import io.ktor.serialization.kotlinx.json.json
12-
import kotlin.time.Duration.Companion.seconds
13-
import kotlinx.serialization.json.Json
149

1510
object MaterialSymbolsModule : Leviathan() {
16-
private val json by instanceOf {
17-
Json {
18-
ignoreUnknownKeys = true
19-
isLenient = true
20-
}
21-
}
22-
private val httpClient by instanceOf {
23-
HttpClient(OkHttp) {
24-
install(HttpTimeout) {
25-
requestTimeoutMillis = 30.seconds.inWholeMilliseconds
26-
}
27-
install(ContentNegotiation) {
28-
json(inject(json))
29-
}
30-
}
31-
}
11+
private val network = NetworkModule
12+
3213
private val materialSymbolsConfigRepository by instanceOf {
3314
MaterialSymbolsConfigRepository(
34-
httpClient = inject(httpClient),
35-
json = inject(json),
15+
httpClient = inject(network.httpClient),
16+
json = inject(network.json),
3617
)
3718
}
3819
private val materialFontRepository by instanceOf {

0 commit comments

Comments
 (0)