mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 16:27:06 +05:30
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:
parent
76c46b4229
commit
096d2882e2
24 changed files with 155 additions and 137 deletions
|
@ -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 {
|
||||
|
|
18
android/proguard-rules.pro
vendored
18
android/proguard-rules.pro
vendored
|
@ -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(...);
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue