diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro index 690d2e9a..a0cd8454 100644 --- a/android/proguard-rules.pro +++ b/android/proguard-rules.pro @@ -1,29 +1,2 @@ -# Keep `Companion` object fields of serializable classes. -# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. --if @kotlinx.serialization.Serializable class ** --keepclassmembers class <1> { - static <1>$Companion Companion; -} - -# Keep `serializer()` on companion objects (both default and named) of serializable classes. --if @kotlinx.serialization.Serializable class ** { - static **$* *; -} --keepclassmembers class <2>$<3> { - kotlinx.serialization.KSerializer serializer(...); -} - -# Keep `INSTANCE.serializer()` of serializable objects. --if @kotlinx.serialization.Serializable class ** { - public static ** INSTANCE; -} --keepclassmembers class <1> { - public static <1> INSTANCE; - kotlinx.serialization.KSerializer serializer(...); -} - -# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. --keepattributes RuntimeVisibleAnnotations,AnnotationDefault - -dontobfuscate -keepattributes SourceFile, LineNumberTable diff --git a/api/src/test/kotlin/dev/msfjarvis/claw/api/ApiWrapper.kt b/api/src/test/kotlin/dev/msfjarvis/claw/api/ApiWrapper.kt index 992514d6..48b26164 100644 --- a/api/src/test/kotlin/dev/msfjarvis/claw/api/ApiWrapper.kt +++ b/api/src/test/kotlin/dev/msfjarvis/claw/api/ApiWrapper.kt @@ -13,11 +13,17 @@ import dev.msfjarvis.claw.model.LobstersPost import dev.msfjarvis.claw.model.LobstersPostDetails import dev.msfjarvis.claw.model.User import dev.msfjarvis.claw.util.TestUtils.getJson +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonNamingStrategy +@OptIn(ExperimentalSerializationApi::class) class ApiWrapper(controller: EitherNetController) { - private val json = Json { ignoreUnknownKeys = true } + private val json = Json { + ignoreUnknownKeys = true + namingStrategy = JsonNamingStrategy.SnakeCase + } private val hottest: List = json.decodeFromString(getJson("hottest.json")) private val postDetails: LobstersPostDetails = json.decodeFromString(getJson("post_details_tdfoqh.json")) diff --git a/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt b/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt index 85923ae1..25086c49 100644 --- a/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt +++ b/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt @@ -14,14 +14,15 @@ import dagger.Provides import dagger.multibindings.IntoSet import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonNamingStrategy import okhttp3.MediaType import retrofit2.Converter @Module @ContributesTo(ApplicationScope::class) +@OptIn(ExperimentalSerializationApi::class) object RetrofitModule { - @OptIn(ExperimentalSerializationApi::class) @Provides @IntoSet fun provideJsonConverterFactory(json: Json): Converter.Factory { @@ -31,6 +32,9 @@ object RetrofitModule { @Provides fun provideJsonSerializer(): Json { - return Json { ignoreUnknownKeys = true } + return Json { + ignoreUnknownKeys = true + namingStrategy = JsonNamingStrategy.SnakeCase + } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0103c85a..bb6ec657 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ kotlin = "1.8.0" okhttp = "3.14.9" retrofit = "2.9.0" richtext = "0.16.0" -serialization = "1.4.1" +serialization = "1.5.0-RC" sqldelight = "2.0.0-alpha05" whetstone = "0.6.0-SNAPSHOT" workmanager = "2.8.0-rc01" diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt index fa5100c9..c248c19c 100644 --- a/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt @@ -15,16 +15,12 @@ import kotlinx.serialization.Serializable @Serializable class Comment( - @SerialName("short_id") val shortId: String, + val shortId: String, val comment: String, val url: String, val score: Int, - @Serializable(with = JavaInstantSerializer::class) - @SerialName("created_at") - val createdAt: TemporalAccessor, - @Serializable(with = JavaInstantSerializer::class) - @SerialName("updated_at") - val updatedAt: TemporalAccessor, - @SerialName("indent_level") val indentLevel: Int, + @Serializable(with = JavaInstantSerializer::class) val createdAt: TemporalAccessor, + @Serializable(with = JavaInstantSerializer::class) val updatedAt: TemporalAccessor, + val indentLevel: Int, @SerialName("commenting_user") val user: User, ) diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPost.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPost.kt index d12f1779..bbaf0187 100644 --- a/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPost.kt +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPost.kt @@ -13,13 +13,13 @@ import kotlinx.serialization.Serializable @Serializable class LobstersPost( - @SerialName("short_id") val shortId: String, - @SerialName("created_at") val createdAt: String, + val shortId: String, + val createdAt: String, val title: String, val url: String, val description: String, - @SerialName("comment_count") val commentCount: Int, - @SerialName("comments_url") val commentsUrl: String, + val commentCount: Int, + val commentsUrl: String, @SerialName("submitter_user") val submitter: User, val tags: List, ) diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPostDetails.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPostDetails.kt index afd2ebad..1f0a6178 100644 --- a/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPostDetails.kt +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/LobstersPostDetails.kt @@ -13,13 +13,13 @@ import kotlinx.serialization.Serializable @Serializable class LobstersPostDetails( - @SerialName("short_id") val shortId: String, - @SerialName("created_at") val createdAt: String, + val shortId: String, + val createdAt: String, val title: String, val url: String, val description: String, - @SerialName("comment_count") val commentCount: Int, - @SerialName("comments_url") val commentsUrl: String, + val commentCount: Int, + val commentsUrl: String, @SerialName("submitter_user") val submitter: User, val tags: List, val comments: List, diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/User.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/User.kt index 8efc6162..30a6c9cc 100644 --- a/model/src/main/kotlin/dev/msfjarvis/claw/model/User.kt +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/User.kt @@ -16,6 +16,6 @@ class User( val username: String, val about: String, @SerialName("invited_by_user") val invitedBy: String?, - @SerialName("avatar_url") val avatarUrl: String, - @SerialName("created_at") val createdAt: String, + val avatarUrl: String, + val createdAt: String, )