Skip to content

Commit 4df30d3

Browse files
committed
use delegation instead of inheritance for special value serialization
1 parent d4365d6 commit 4df30d3

File tree

7 files changed

+15
-11
lines changed

7 files changed

+15
-11
lines changed

firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/serializers.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class FirebaseListSerializer : KSerializer<Iterable<Any?>> {
108108
* A special case of serializer for values natively supported by Firebase and
109109
* don't require an additional encoding/decoding.
110110
*/
111-
abstract class SpecialValueSerializer<T>(
111+
class SpecialValueSerializer<T>(
112112
serialName: String,
113113
private val toNativeValue: (T) -> Any?,
114114
private val fromNativeValue: (Any?) -> T

firebase-database/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ kotlin {
9898
val commonMain by getting {
9999
dependencies {
100100
api(project(":firebase-app"))
101-
api(project(":firebase-common"))
101+
implementation(project(":firebase-common"))
102102
}
103103
}
104104

firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/ServerValue.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dev.gitlive.firebase.database
33
import dev.gitlive.firebase.FirebaseDecoder
44
import dev.gitlive.firebase.FirebaseEncoder
55
import dev.gitlive.firebase.SpecialValueSerializer
6+
import kotlinx.serialization.KSerializer
67
import kotlinx.serialization.Serializable
78
import kotlinx.serialization.SerializationException
89

@@ -18,7 +19,7 @@ expect class ServerValue internal constructor(nativeValue: Any){
1819
}
1920

2021
/** Serializer for [ServerValue]. Must be used with [FirebaseEncoder]/[FirebaseDecoder].*/
21-
object ServerValueSerializer: SpecialValueSerializer<ServerValue>(
22+
object ServerValueSerializer: KSerializer<ServerValue> by SpecialValueSerializer(
2223
serialName = "ServerValue",
2324
toNativeValue = ServerValue::nativeValue,
2425
fromNativeValue = { raw ->

firebase-firestore/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ kotlin {
9999
val commonMain by getting {
100100
dependencies {
101101
api(project(":firebase-app"))
102-
api(project(":firebase-common"))
102+
implementation(project(":firebase-common"))
103103
}
104104
}
105105

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/GeoPoint.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.gitlive.firebase.firestore
22

33
import dev.gitlive.firebase.SpecialValueSerializer
4+
import kotlinx.serialization.KSerializer
45
import kotlinx.serialization.Serializable
56
import kotlinx.serialization.SerializationException
67

@@ -17,7 +18,7 @@ expect class GeoPoint internal constructor(nativeValue: NativeGeoPoint) {
1718
}
1819

1920
/** Serializer for [GeoPoint]. If used with [FirebaseEncoder] performs serialization using native Firebase mechanisms. */
20-
object GeoPointSerializer : SpecialValueSerializer<GeoPoint>(
21+
object GeoPointSerializer : KSerializer<GeoPoint> by SpecialValueSerializer(
2122
serialName = "GeoPoint",
2223
toNativeValue = GeoPoint::nativeValue,
2324
fromNativeValue = { value ->

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/Timestamp.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import dev.gitlive.firebase.FirebaseDecoder
44
import dev.gitlive.firebase.FirebaseEncoder
55
import dev.gitlive.firebase.SpecialValueSerializer
66
import dev.gitlive.firebase.firestore.DoubleAsTimestampSerializer.serverTimestamp
7+
import kotlinx.serialization.KSerializer
78
import kotlinx.serialization.Serializable
89
import kotlinx.serialization.SerializationException
910
import kotlin.time.Duration
@@ -47,7 +48,7 @@ fun Timestamp.Companion.fromMilliseconds(milliseconds: Double): Timestamp = from
4748
fun Timestamp.toMilliseconds(): Double = toDuration().toDouble(DurationUnit.MILLISECONDS)
4849

4950
/** A serializer for [BaseTimestamp]. Must be used with [FirebaseEncoder]/[FirebaseDecoder]. */
50-
object BaseTimestampSerializer : SpecialValueSerializer<BaseTimestamp>(
51+
object BaseTimestampSerializer : KSerializer<BaseTimestamp> by SpecialValueSerializer(
5152
serialName = "Timestamp",
5253
toNativeValue = { value ->
5354
when (value) {
@@ -66,7 +67,7 @@ object BaseTimestampSerializer : SpecialValueSerializer<BaseTimestamp>(
6667
)
6768

6869
/** A serializer for [Timestamp]. Must be used with [FirebaseEncoder]/[FirebaseDecoder]. */
69-
object TimestampSerializer : SpecialValueSerializer<Timestamp>(
70+
object TimestampSerializer : KSerializer<Timestamp> by SpecialValueSerializer(
7071
serialName = "Timestamp",
7172
toNativeValue = Timestamp::nativeValue,
7273
fromNativeValue = { value ->
@@ -78,7 +79,7 @@ object TimestampSerializer : SpecialValueSerializer<Timestamp>(
7879
)
7980

8081
/** A serializer for [Timestamp.ServerTimestamp]. Must be used with [FirebaseEncoder]/[FirebaseDecoder]. */
81-
object ServerTimestampSerializer : SpecialValueSerializer<Timestamp.ServerTimestamp>(
82+
object ServerTimestampSerializer : KSerializer<Timestamp.ServerTimestamp> by SpecialValueSerializer(
8283
serialName = "Timestamp",
8384
toNativeValue = { FieldValue.serverTimestamp.nativeValue },
8485
fromNativeValue = { value ->
@@ -90,7 +91,7 @@ object ServerTimestampSerializer : SpecialValueSerializer<Timestamp.ServerTimest
9091
)
9192

9293
/** A serializer for a Double field which is stored as a Timestamp. */
93-
object DoubleAsTimestampSerializer : SpecialValueSerializer<Double>(
94+
object DoubleAsTimestampSerializer : KSerializer<Double> by SpecialValueSerializer(
9495
serialName = "Timestamp",
9596
toNativeValue = { value ->
9697
when(value) {

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package dev.gitlive.firebase.firestore
77
import dev.gitlive.firebase.*
88
import kotlinx.coroutines.flow.Flow
99
import kotlinx.serialization.DeserializationStrategy
10+
import kotlinx.serialization.KSerializer
1011
import kotlinx.serialization.Serializable
1112
import kotlinx.serialization.SerializationException
1213
import kotlinx.serialization.SerializationStrategy
@@ -164,7 +165,7 @@ expect class DocumentReference internal constructor(nativeValue: NativeDocumentR
164165
/**
165166
* A serializer for [DocumentReference]. If used with [FirebaseEncoder] performs serialization using native Firebase mechanisms.
166167
*/
167-
object DocumentReferenceSerializer : SpecialValueSerializer<DocumentReference>(
168+
object DocumentReferenceSerializer : KSerializer<DocumentReference> by SpecialValueSerializer(
168169
serialName = "DocumentReference",
169170
toNativeValue = DocumentReference::nativeValue,
170171
fromNativeValue = { value ->
@@ -282,7 +283,7 @@ expect class FieldValue internal constructor(nativeValue: Any) {
282283
}
283284

284285
/** A serializer for [FieldValue]. Must be used in conjunction with [FirebaseEncoder]. */
285-
object FieldValueSerializer : SpecialValueSerializer<FieldValue>(
286+
object FieldValueSerializer : KSerializer<FieldValue> by SpecialValueSerializer(
286287
serialName = "FieldValue",
287288
toNativeValue = FieldValue::nativeValue,
288289
fromNativeValue = { raw ->

0 commit comments

Comments
 (0)