all: refactor model classes and serialization

- Move model classes to a standalone `model` Gradle module
- Migrate from Moshi to kotlinx.serialization for multiplatform support
This commit is contained in:
Harsh Shandilya 2021-09-30 12:57:23 +05:30
parent 76c46b4229
commit 096d2882e2
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
24 changed files with 155 additions and 137 deletions

View file

@ -23,7 +23,8 @@ dependencies {
implementation(libs.androidx.paging.compose)
implementation(libs.dagger.hilt.android)
implementation(libs.sqldelight.extensions.coroutines)
implementation(libs.retrofit.moshiConverter)
implementation(libs.kotlinx.serialization.json)
implementation(libs.retrofit.kotlinxSerializationConverter) { isTransitive = false }
}
android {

View file

@ -12,3 +12,21 @@
-keep,allowobfuscation,allowshrinking class dev.msfjarvis.claw.android.** { *; }
-dontobfuscate
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** {
*** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
kotlinx.serialization.KSerializer serializer(...);
}
-keep,includedescriptorclasses class dev.msfjarvis.claw.model.**$$serializer { *; }
-keepclassmembers class dev.msfjarvis.claw.model.** {
*** Companion;
}
-keepclasseswithmembers class dev.msfjarvis.claw.model.** {
kotlinx.serialization.KSerializer serializer(...);
}

View file

@ -1,7 +1,7 @@
package dev.msfjarvis.claw.android.ext
import dev.msfjarvis.claw.api.model.LobstersPost
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.model.LobstersPost
/** Convert a [LobstersPost] object returned by the API into a [SavedPost] for persistence. */
fun LobstersPost.toDbModel(): SavedPost {

View file

@ -1,18 +1,21 @@
package dev.msfjarvis.claw.android.injection
import android.util.Log
import com.squareup.moshi.Moshi
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dagger.Lazy
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.claw.api.LobstersApi
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import okhttp3.MediaType
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
@OptIn(ExperimentalSerializationApi::class)
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@ -35,12 +38,12 @@ object ApiModule {
@Provides
fun provideRetrofit(
client: Lazy<OkHttpClient>,
moshi: Lazy<Moshi>,
): Retrofit {
val contentType = MediaType.get("application/json")
return Retrofit.Builder()
.client(client.get())
.baseUrl(LobstersApi.BASE_URL)
.addConverterFactory(MoshiConverterFactory.create(moshi.get()))
.addConverterFactory(Json.asConverterFactory(contentType))
.build()
}

View file

@ -1,18 +0,0 @@
package dev.msfjarvis.claw.android.injection
import com.squareup.moshi.Moshi
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object MoshiModule {
@Provides
@Reusable
fun provideMoshi(): Moshi {
return Moshi.Builder().build()
}
}

View file

@ -2,7 +2,7 @@ package dev.msfjarvis.claw.android.paging
import androidx.paging.PagingSource
import androidx.paging.PagingState
import dev.msfjarvis.claw.api.model.LobstersPost
import dev.msfjarvis.claw.model.LobstersPost
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

View file

@ -14,9 +14,9 @@ import androidx.compose.ui.unit.dp
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items
import dev.msfjarvis.claw.android.ext.toDbModel
import dev.msfjarvis.claw.api.model.LobstersPost
import dev.msfjarvis.claw.common.posts.LobstersCard
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.model.LobstersPost
import kotlinx.coroutines.launch
@Composable