Skip to content

Commit bc5bc4c

Browse files
Enforce character alias to be a list
1 parent 5dda4a1 commit bc5bc4c

File tree

6 files changed

+45
-2
lines changed

6 files changed

+45
-2
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ println("Java v${System.getProperty("java.version")}")
1414
println("Arch: ${System.getProperty("os.arch")}")
1515

1616
group = "github.buriedincode"
17-
version = "0.2.1"
17+
version = "0.2.2"
1818

1919
repositories {
2020
mavenCentral()

cache.sqlite

0 Bytes
Binary file not shown.

src/main/kotlin/github/buriedincode/kalibak/Metron.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class Metron(
7474
.newBuilder()
7575
.uri(uri)
7676
.setHeader("Accept", "application/json")
77-
.setHeader("User-Agent", "Kalibak/0.2.1 (${System.getProperty("os.name")}/${System.getProperty("os.version")}; Kotlin/${KotlinVersion.CURRENT})")
77+
.setHeader("User-Agent", "Kalibak/0.2.2 (${System.getProperty("os.name")}/${System.getProperty("os.version")}; Kotlin/${KotlinVersion.CURRENT})")
7878
.setHeader("Authorization", this.authorization)
7979
.GET()
8080
.build()

src/main/kotlin/github/buriedincode/kalibak/schemas/Character.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package github.buriedincode.kalibak.schemas
22

3+
import github.buriedincode.kalibak.serializers.EmptyListSerializer
34
import github.buriedincode.kalibak.serializers.NullableStringSerializer
45
import kotlinx.datetime.Instant
56
import kotlinx.serialization.ExperimentalSerializationApi
@@ -9,6 +10,7 @@ import kotlinx.serialization.json.JsonNames
910
@OptIn(ExperimentalSerializationApi::class)
1011
@Serializable
1112
data class Character(
13+
@Serializable(with = EmptyListSerializer::class)
1214
val alias: List<String> = emptyList(),
1315
@JsonNames("cv_id")
1416
val comicvineId: Long? = null,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package github.buriedincode.kalibak.serializers
2+
3+
import kotlinx.serialization.ExperimentalSerializationApi
4+
import kotlinx.serialization.KSerializer
5+
import kotlinx.serialization.builtins.ListSerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.descriptors.listSerialDescriptor
8+
import kotlinx.serialization.encoding.Decoder
9+
import kotlinx.serialization.encoding.Encoder
10+
11+
class EmptyListSerializer<T>(private val elementSerializer: KSerializer<T>) : KSerializer<List<T>> {
12+
@OptIn(ExperimentalSerializationApi::class)
13+
override val descriptor: SerialDescriptor = listSerialDescriptor(elementSerializer.descriptor)
14+
15+
@OptIn(ExperimentalSerializationApi::class)
16+
override fun deserialize(decoder: Decoder): List<T> {
17+
return decoder.decodeNullableSerializableValue(ListSerializer(elementSerializer)) ?: emptyList()
18+
}
19+
20+
override fun serialize(encoder: Encoder, value: List<T>) {
21+
encoder.encodeSerializableValue(ListSerializer(elementSerializer), value)
22+
}
23+
}

src/test/kotlin/github/buriedincode/kalibak/schemas/CharacterTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,23 @@ class CharacterTest {
6969
session.getCharacter(id = -1)
7070
}
7171
}
72+
73+
@Test
74+
fun `Test GetCharacter with a null alias`() {
75+
val result = session.getCharacter(id = 25657)
76+
assertNotNull(result)
77+
assertAll(
78+
{ assertTrue(result.alias.isEmpty()) },
79+
)
80+
}
81+
82+
@Test
83+
fun `Test GetCharacter with an alias`() {
84+
val result = session.getCharacter(id = 648)
85+
assertNotNull(result)
86+
assertAll(
87+
{ assertEquals("Spy-D", result.alias[0]) },
88+
)
89+
}
7290
}
7391
}

0 commit comments

Comments
 (0)