From 84f45f523aba55256b4aed933b48e33d585eb76f Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 7 Nov 2020 11:15:54 +0530 Subject: [PATCH] Replace Moshi with kotlinx.serialization Signed-off-by: Harsh Shandilya --- app/build.gradle.kts | 3 +- .../data/source/LobstersApiTypeConverters.kt | 10 +++---- .../lobsters/ui/posts/LobstersItem.kt | 2 +- buildSrc/src/main/java/Dependencies.kt | 8 ------ lobsters-api/build.gradle.kts | 4 --- .../dev/msfjarvis/lobsters/api/ApiClient.kt | 6 ++-- model/build.gradle.kts | 3 -- .../lobsters/model/KeybaseSignature.kt | 10 +++---- .../msfjarvis/lobsters/model/LobstersPost.kt | 18 ++++++------ .../dev/msfjarvis/lobsters/model/Submitter.kt | 28 +++++++++---------- 10 files changed, 40 insertions(+), 52 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3c610c94..6621c1d7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.android.application") kotlin("android") kotlin("kapt") + kotlin("plugin.serialization") version "1.4.10" id("dagger.hilt.android.plugin") `lobsters-plugin` `core-library-desugaring` @@ -90,9 +91,9 @@ dependencies { implementation(Dependencies.ThirdParty.Roomigrant.runtime) implementation(Dependencies.AndroidX.material) implementation(Dependencies.AndroidX.Hilt.dagger) - implementation(Dependencies.ThirdParty.Moshi.lib) implementation(Dependencies.ThirdParty.accompanist) implementation(Dependencies.Kotlin.Coroutines.android) + implementation(Dependencies.Kotlin.Serialization.json) implementation(Dependencies.ThirdParty.customtabs) androidTestImplementation(Dependencies.Testing.daggerHilt) testImplementation(Dependencies.Testing.junit) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/source/LobstersApiTypeConverters.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/source/LobstersApiTypeConverters.kt index 8a00c910..6694ad8a 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/data/source/LobstersApiTypeConverters.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/source/LobstersApiTypeConverters.kt @@ -1,24 +1,24 @@ package dev.msfjarvis.lobsters.data.source import androidx.room.TypeConverter -import com.squareup.moshi.Moshi import dev.msfjarvis.lobsters.model.Submitter -import dev.msfjarvis.lobsters.model.SubmitterJsonAdapter +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json object LobstersApiTypeConverters { - private val moshi = Moshi.Builder().build() private const val SEPARATOR = "," @TypeConverter @JvmStatic fun toSubmitterUser(value: String?): Submitter? { - return value?.let { SubmitterJsonAdapter(moshi).fromJson(value) } + return value?.let { Json.decodeFromString(value) } } @TypeConverter @JvmStatic fun fromSubmitterUser(value: Submitter?): String? { - return value?.let { SubmitterJsonAdapter(moshi).toJson(value) } + return value?.let { Json.encodeToString(value) } } @TypeConverter diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index b43c71c2..8eac2e0f 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -136,7 +136,7 @@ fun PreviewLobstersItem() { "sevan", null, null, - null, + emptyList(), ), listOf("openbsd"), ) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index a666c6d2..baeb360e 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -79,18 +79,10 @@ object Dependencies { const val customtabs = "saschpe.android:customtabs:3.0.2" const val retrofitSerialization = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" - object Moshi { - - private const val version = "1.11.0" - const val codegen = "com.squareup.moshi:moshi-kotlin-codegen:$version" - const val lib = "com.squareup.moshi:moshi:$version" - } - object Retrofit { private const val version = "2.9.0" const val lib = "com.squareup.retrofit2:retrofit:$version" - const val moshi = "com.squareup.retrofit2:converter-moshi:$version" } object Roomigrant { diff --git a/lobsters-api/build.gradle.kts b/lobsters-api/build.gradle.kts index 77c3ac11..0dcb4ae5 100644 --- a/lobsters-api/build.gradle.kts +++ b/lobsters-api/build.gradle.kts @@ -1,18 +1,14 @@ plugins { id("com.android.library") kotlin("android") - kotlin("kapt") kotlin("plugin.serialization") version "1.4.10" `lobsters-plugin` } dependencies { implementation(project(":model")) - implementation(Dependencies.ThirdParty.Retrofit.lib) - implementation(Dependencies.ThirdParty.Retrofit.moshi) implementation(Dependencies.Kotlin.Serialization.json) implementation(Dependencies.ThirdParty.retrofitSerialization) - kaptTest(Dependencies.ThirdParty.Moshi.codegen) testImplementation(Dependencies.Testing.junit) testImplementation(Dependencies.Kotlin.Coroutines.core) testImplementation(Dependencies.Testing.mockWebServer) diff --git a/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/ApiClient.kt b/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/ApiClient.kt index 26f72f56..3922f16a 100644 --- a/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/ApiClient.kt +++ b/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/ApiClient.kt @@ -1,13 +1,15 @@ package dev.msfjarvis.lobsters.api +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory +import kotlinx.serialization.json.Json +import okhttp3.MediaType import retrofit2.Retrofit -import retrofit2.converter.moshi.MoshiConverterFactory object ApiClient { inline fun getClient(baseUrl: String): T { return Retrofit.Builder() .baseUrl(baseUrl) - .addConverterFactory(MoshiConverterFactory.create()) + .addConverterFactory(Json.asConverterFactory(MediaType.get("application/json"))) .build() .create(T::class.java) } diff --git a/model/build.gradle.kts b/model/build.gradle.kts index 137c0ade..bdd12aef 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -1,13 +1,10 @@ plugins { id("com.android.library") kotlin("android") - kotlin("kapt") kotlin("plugin.serialization") version "1.4.10" `lobsters-plugin` } dependencies { - kapt(Dependencies.ThirdParty.Moshi.codegen) - implementation(Dependencies.ThirdParty.Moshi.lib) implementation(Dependencies.Kotlin.Serialization.json) } diff --git a/model/src/main/java/dev/msfjarvis/lobsters/model/KeybaseSignature.kt b/model/src/main/java/dev/msfjarvis/lobsters/model/KeybaseSignature.kt index 6002a693..77a3b001 100644 --- a/model/src/main/java/dev/msfjarvis/lobsters/model/KeybaseSignature.kt +++ b/model/src/main/java/dev/msfjarvis/lobsters/model/KeybaseSignature.kt @@ -1,12 +1,12 @@ package dev.msfjarvis.lobsters.model -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable -@JsonClass(generateAdapter = true) +@Serializable class KeybaseSignature( - @Json(name = "kb_username") + @SerialName("kb_username") val kbUsername: String, - @Json(name = "sig_hash") + @SerialName("sig_hash") val sigHash: String ) diff --git a/model/src/main/java/dev/msfjarvis/lobsters/model/LobstersPost.kt b/model/src/main/java/dev/msfjarvis/lobsters/model/LobstersPost.kt index f6d947bd..4a617b12 100644 --- a/model/src/main/java/dev/msfjarvis/lobsters/model/LobstersPost.kt +++ b/model/src/main/java/dev/msfjarvis/lobsters/model/LobstersPost.kt @@ -1,26 +1,26 @@ package dev.msfjarvis.lobsters.model -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable -@JsonClass(generateAdapter = true) +@Serializable class LobstersPost( - @Json(name = "short_id") + @SerialName("short_id") val shortId: String, - @Json(name = "short_id_url") + @SerialName("short_id_url") val shortIdUrl: String, - @Json(name = "created_at") + @SerialName("created_at") val createdAt: String, val title: String, val url: String, val score: Long, val flags: Long, - @Json(name = "comment_count") + @SerialName("comment_count") val commentCount: Long, val description: String, - @Json(name = "comments_url") + @SerialName("comments_url") val commentsUrl: String, - @Json(name = "submitter_user") + @SerialName("submitter_user") val submitterUser: Submitter, val tags: List, ) diff --git a/model/src/main/java/dev/msfjarvis/lobsters/model/Submitter.kt b/model/src/main/java/dev/msfjarvis/lobsters/model/Submitter.kt index 1260d02a..a98ce55b 100644 --- a/model/src/main/java/dev/msfjarvis/lobsters/model/Submitter.kt +++ b/model/src/main/java/dev/msfjarvis/lobsters/model/Submitter.kt @@ -1,27 +1,27 @@ package dev.msfjarvis.lobsters.model -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable -@JsonClass(generateAdapter = true) +@Serializable class Submitter( val username: String, - @Json(name = "created_at") + @SerialName("created_at") val createdAt: String, - @Json(name = "is_admin") + @SerialName("is_admin") val isAdmin: Boolean, val about: String, - @Json(name = "is_moderator") + @SerialName("is_moderator") val isModerator: Boolean, val karma: Long = 0, - @Json(name = "avatar_url") + @SerialName("avatar_url") val avatarUrl: String, - @Json(name = "invited_by_user") + @SerialName("invited_by_user") val invitedByUser: String, - @Json(name = "github_username") - val githubUsername: String?, - @Json(name = "twitter_username") - val twitterUsername: String?, - @Json(name = "keybase_signatures") - val keybaseSignatures: List? + @SerialName("github_username") + val githubUsername: String? = null, + @SerialName("twitter_username") + val twitterUsername: String? = null, + @SerialName("keybase_signatures") + val keybaseSignatures: List = emptyList() )