@@ -15,23 +15,24 @@ import kotlinx.serialization.modules.SerializersModule
15
15
fun <T > encode (
16
16
strategy : SerializationStrategy <T >,
17
17
value : T ,
18
- shouldEncodeElementDefault : Boolean ,
19
- positiveInfinity : Any = Double .POSITIVE_INFINITY
18
+ shouldEncodeElementDefault : Boolean
20
19
): Any? =
21
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity ).apply {
20
+ FirebaseEncoder (shouldEncodeElementDefault).apply {
22
21
encodeSerializableValue(
23
22
strategy,
24
23
value
25
24
)
26
25
}.value// .also { println("encoded $it") }
27
26
28
- inline fun <reified T > encode (value : T , shouldEncodeElementDefault : Boolean , positiveInfinity : Any = Double .POSITIVE_INFINITY ): Any? = value?.let {
29
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity).apply { encodeSerializableValue(it.firebaseSerializer(), it) }.value
27
+ @Suppress(" UNCHECKED_CAST" )
28
+ inline fun <reified T > encode (value : T , shouldEncodeElementDefault : Boolean ): Any? = value?.let {
29
+ FirebaseEncoder (shouldEncodeElementDefault).apply { encodeSerializableValue(firebaseSerializer(it) as SerializationStrategy <T >, it) }.value
30
30
}
31
31
32
32
expect fun FirebaseEncoder.structureEncoder (descriptor : SerialDescriptor ): CompositeEncoder
33
33
34
- class FirebaseEncoder (internal val shouldEncodeElementDefault : Boolean , positiveInfinity : Any ) : TimestampEncoder(positiveInfinity), Encoder {
34
+ open class FirebaseEncoder (internal val shouldEncodeElementDefault : Boolean ) : Encoder {
35
+ open fun getEncoder (shouldEncodeElementDefault : Boolean ): FirebaseEncoder = FirebaseEncoder (shouldEncodeElementDefault)
35
36
36
37
var value: Any? = null
37
38
@@ -51,7 +52,7 @@ class FirebaseEncoder(internal val shouldEncodeElementDefault: Boolean, positive
51
52
}
52
53
53
54
override fun encodeDouble (value : Double ) {
54
- this .value = encodeTimestamp( value)
55
+ this .value = value
55
56
}
56
57
57
58
override fun encodeEnum (enumDescriptor : SerialDescriptor , index : Int ) {
@@ -88,63 +89,15 @@ class FirebaseEncoder(internal val shouldEncodeElementDefault: Boolean, positive
88
89
89
90
@ExperimentalSerializationApi
90
91
override fun encodeInline (inlineDescriptor : SerialDescriptor ): Encoder =
91
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity)
92
- }
93
-
94
- abstract class TimestampEncoder (internal val positiveInfinity : Any ) {
95
- fun encodeTimestamp (value : Double ) = when (value) {
96
- Double .POSITIVE_INFINITY -> positiveInfinity
97
- else -> value
98
- }
99
- }
100
-
101
- class FirebaseTimestampCompositeEncoder (val onSet : (Any )-> Unit ) : CompositeEncoder {
102
- var nanos: Int = 0
103
- var seconds: Long = 0
104
-
105
- override val serializersModule = EmptySerializersModule
106
-
107
- override fun encodeBooleanElement (descriptor : SerialDescriptor , index : Int , value : Boolean ) = throw IllegalStateException ()
108
- override fun encodeByteElement (descriptor : SerialDescriptor , index : Int , value : Byte ) = throw IllegalStateException ()
109
- override fun encodeCharElement (descriptor : SerialDescriptor , index : Int , value : Char ) = throw IllegalStateException ()
110
- override fun encodeDoubleElement (descriptor : SerialDescriptor , index : Int , value : Double ) = throw IllegalStateException ()
111
- override fun encodeFloatElement (descriptor : SerialDescriptor , index : Int , value : Float ) = throw IllegalStateException ()
112
- @ExperimentalSerializationApi
113
- override fun encodeInlineElement (descriptor : SerialDescriptor , index : Int ): Encoder = throw IllegalStateException ()
114
-
115
- override fun encodeIntElement (descriptor : SerialDescriptor , index : Int , value : Int ) {
116
- nanos = value
117
- }
118
-
119
- override fun encodeLongElement (descriptor : SerialDescriptor , index : Int , value : Long ) {
120
- seconds = value
121
- }
122
-
123
- @ExperimentalSerializationApi
124
- override fun <T : Any > encodeNullableSerializableElement (
125
- descriptor : SerialDescriptor ,
126
- index : Int ,
127
- serializer : SerializationStrategy <T >,
128
- value : T ?
129
- ) = throw IllegalStateException ()
130
-
131
- override fun <T > encodeSerializableElement (descriptor : SerialDescriptor , index : Int , serializer : SerializationStrategy <T >, value : T ) = throw IllegalStateException ()
132
-
133
- override fun encodeShortElement (descriptor : SerialDescriptor , index : Int , value : Short ) = throw IllegalStateException ()
134
-
135
- override fun encodeStringElement (descriptor : SerialDescriptor , index : Int , value : String ) = throw IllegalStateException ()
136
-
137
- override fun endStructure (descriptor : SerialDescriptor ) {
138
- onSet(Timestamp (nanos, seconds).asNative())
139
- }
92
+ getEncoder(shouldEncodeElementDefault)
140
93
}
141
94
142
95
open class FirebaseCompositeEncoder constructor(
143
96
private val shouldEncodeElementDefault : Boolean ,
144
- positiveInfinity : Any ,
97
+ private val getEncoder : ( Boolean ) -> FirebaseEncoder ,
145
98
private val end : () -> Unit = {},
146
99
private val set : (descriptor: SerialDescriptor , index: Int , value: Any? ) -> Unit
147
- ) : TimestampEncoder(positiveInfinity), CompositeEncoder {
100
+ ) : CompositeEncoder {
148
101
149
102
override val serializersModule = EmptySerializersModule
150
103
@@ -167,7 +120,7 @@ open class FirebaseCompositeEncoder constructor(
167
120
descriptor,
168
121
index,
169
122
value?.let {
170
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity ).apply {
123
+ getEncoder (shouldEncodeElementDefault).apply {
171
124
encodeSerializableValue(serializer, value)
172
125
}.value
173
126
}
@@ -181,7 +134,7 @@ open class FirebaseCompositeEncoder constructor(
181
134
) = set(
182
135
descriptor,
183
136
index,
184
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity ).apply {
137
+ getEncoder (shouldEncodeElementDefault).apply {
185
138
encodeSerializableValue(serializer, value)
186
139
}.value
187
140
)
@@ -192,7 +145,7 @@ open class FirebaseCompositeEncoder constructor(
192
145
193
146
override fun encodeCharElement (descriptor : SerialDescriptor , index : Int , value : Char ) = set(descriptor, index, value)
194
147
195
- override fun encodeDoubleElement (descriptor : SerialDescriptor , index : Int , value : Double ) = set(descriptor, index, encodeTimestamp( value) )
148
+ override fun encodeDoubleElement (descriptor : SerialDescriptor , index : Int , value : Double ) = set(descriptor, index, value)
196
149
197
150
override fun encodeFloatElement (descriptor : SerialDescriptor , index : Int , value : Float ) = set(descriptor, index, value)
198
151
@@ -206,7 +159,7 @@ open class FirebaseCompositeEncoder constructor(
206
159
207
160
@ExperimentalSerializationApi
208
161
override fun encodeInlineElement (descriptor : SerialDescriptor , index : Int ): Encoder =
209
- FirebaseEncoder (shouldEncodeElementDefault, positiveInfinity )
162
+ FirebaseEncoder (shouldEncodeElementDefault)
210
163
}
211
164
212
165
0 commit comments