Skip to content

Commit

Permalink
Switch to kotlinx.serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
fobo66 committed Nov 26, 2023
1 parent 506e26c commit 40f8525
Show file tree
Hide file tree
Showing 13 changed files with 58 additions and 86 deletions.
7 changes: 4 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import com.android.sdklib.AndroidVersion.VersionCodes
plugins {
id("com.android.application")
kotlin("android")
kotlin("plugin.serialization")
alias(libs.plugins.ksp)
id("kotlin-parcelize")
id("io.gitlab.arturbosch.detekt")
Expand Down Expand Up @@ -110,9 +111,9 @@ dependencies {
implementation(libs.retrofit)
implementation(platform(okhttp.bom))
implementation(okhttp.core)
implementation(libs.retrofit.moshi)
implementation(libs.moshi)
ksp(libs.moshi.codegen)
implementation(libs.retrofit.kotlinx)
implementation(libs.kotlinx.serialization)
implementation(libs.kotlinx.datetime)

implementation(libs.timber)
implementation(libs.leakcanary)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ package dev.fobo66.factcheckerassistant.api.models

import android.os.Parcelable
import androidx.compose.runtime.Immutable
import com.squareup.moshi.JsonClass
import dev.fobo66.factcheckerassistant.util.InstantParceler
import kotlinx.datetime.Instant
import kotlinx.parcelize.Parcelize
import java.time.LocalDateTime
import kotlinx.parcelize.TypeParceler
import kotlinx.serialization.Serializable

@JsonClass(generateAdapter = true)
@Serializable
@Immutable
@Parcelize
data class Claim(
val text: String,
val claimant: String?,
val claimDate: LocalDateTime?,
val claimReview: List<ClaimReview>
val claimant: String? = null,
@TypeParceler<Instant?, InstantParceler>() val claimDate: Instant? = null,
val claimReview: List<ClaimReview> = emptyList()
) : Parcelable
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ package dev.fobo66.factcheckerassistant.api.models

import android.os.Parcelable
import androidx.compose.runtime.Immutable
import com.squareup.moshi.JsonClass
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable

@JsonClass(generateAdapter = true)
@Serializable
@Immutable
@Parcelize
data class ClaimReview(
val publisher: Publisher,
val url: String,
val title: String?,
val reviewDate: String?,
val reviewDate: String? = null,
val textualRating: String,
val languageCode: String
) : Parcelable
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.fobo66.factcheckerassistant.api.models

import com.squareup.moshi.JsonClass
import kotlinx.serialization.Serializable

@JsonClass(generateAdapter = true)
@Serializable
data class FactCheckResponse(
val claims: List<Claim>?,
val nextPageToken: String?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package dev.fobo66.factcheckerassistant.api.models

import android.os.Parcelable
import androidx.compose.runtime.Immutable
import com.squareup.moshi.JsonClass
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable

@JsonClass(generateAdapter = true)
@Serializable
@Immutable
@Parcelize
data class Publisher(
val name: String?,
val site: String?
val name: String? = null,
val site: String? = null
) : Parcelable
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package dev.fobo66.factcheckerassistant.di

import com.squareup.moshi.Moshi
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.fobo66.factcheckerassistant.api.FactCheckApi
import dev.fobo66.factcheckerassistant.util.LocalDateTimeAdapter
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
import javax.inject.Singleton

Expand All @@ -18,16 +18,17 @@ object ApiModule {

@Provides
@Singleton
fun provideMoshi(): Moshi =
Moshi.Builder()
.add(LocalDateTimeAdapter())
.build()
fun provideJson(): Json =
Json {
ignoreUnknownKeys = true
isLenient = true
}

@Provides
@Singleton
fun provideFactCheckApi(moshi: Moshi) = Retrofit.Builder()
fun provideFactCheckApi(json: Json) = Retrofit.Builder()
.baseUrl("https://factchecktools.googleapis.com")
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addConverterFactory(json.asConverterFactory("text/json".toMediaType()))
.build()
.create<FactCheckApi>()
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import dev.fobo66.factcheckerassistant.api.models.ClaimReview
import dev.fobo66.factcheckerassistant.api.models.Publisher
import dev.fobo66.factcheckerassistant.ui.theme.FactCheckerAssistantTheme
import kotlinx.collections.immutable.toImmutableList
import java.time.LocalDateTime
import kotlinx.datetime.Clock

@OptIn(ExperimentalFoundationApi::class)
@Composable
Expand Down Expand Up @@ -161,7 +161,7 @@ private fun ClaimDetailsPreview() {
Claim(
"test",
"tester",
LocalDateTime.now(),
Clock.System.now(),
listOf(
ClaimReview(
Publisher("test", "test.com"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ fun ClaimsSearch(
val claimDate = remember {
DateUtils.getRelativeTimeSpanString(
context,
claim?.claimDate?.toInstant(ZoneOffset.UTC)?.toEpochMilli()
claim?.claimDate?.toEpochMilliseconds()
?: System.currentTimeMillis()
).toString()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package dev.fobo66.factcheckerassistant.util

import android.os.Parcel
import kotlinx.datetime.Instant
import kotlinx.parcelize.Parceler

object InstantParceler : Parceler<Instant?> {
override fun create(parcel: Parcel): Instant? {
val timestamp = parcel.readString()
return if (timestamp != null) {
Instant.parse(timestamp)
} else {
null
}
}

override fun Instant?.write(parcel: Parcel, flags: Int) {
parcel.writeString(this?.toString())
}
}

This file was deleted.

This file was deleted.

1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
alias(androidx.plugins.library) apply false
alias(androidx.plugins.test) apply false
kotlin("android") version libs.versions.kotlin apply false
kotlin("plugin.serialization") version libs.versions.kotlin apply false
alias(libs.plugins.ksp) apply false
alias(di.plugins.hilt) apply false
alias(analysis.plugins.detekt) apply false
Expand Down
3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,16 @@ dependencyResolutionManagement {
library("material", "com.google.android.material:material:1.10.0")
library("retrofit", "com.squareup.retrofit2", "retrofit").versionRef("retrofit")
library("retrofit.moshi", "com.squareup.retrofit2", "converter-moshi").versionRef("retrofit")
library("retrofit.kotlinx", "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
library("retrofit.mock", "com.squareup.retrofit2", "retrofit-mock").versionRef("retrofit")
library("leakcanary", "com.squareup.leakcanary:leakcanary-android:2.12")
library("commonmark", "org.commonmark:commonmark:0.21.0")
library("timber", "com.jakewharton.timber:timber:5.0.1")
library("coil", "io.coil-kt:coil-compose:2.5.0")
library("collections", "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.6")
library("desugar", "com.android.tools:desugar_jdk_libs:2.0.4")
library("kotlinx.serialization", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.1")
library("kotlinx.datetime", "org.jetbrains.kotlinx:kotlinx-datetime:0.4.1")
library(
"coroutines",
"org.jetbrains.kotlinx",
Expand Down

0 comments on commit 40f8525

Please sign in to comment.