@@ -18,16 +18,60 @@ import kotlinx.rpc.krpc.server.KrpcServer
18
18
import kotlinx.rpc.krpc.streamScoped
19
19
import kotlinx.rpc.registerService
20
20
import kotlinx.rpc.withService
21
+ import kotlinx.serialization.KSerializer
22
+ import kotlinx.serialization.descriptors.PrimitiveKind
23
+ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
24
+ import kotlinx.serialization.descriptors.SerialDescriptor
25
+ import kotlinx.serialization.encoding.Decoder
26
+ import kotlinx.serialization.encoding.Encoder
27
+ import kotlinx.serialization.modules.SerializersModule
21
28
import org.junit.Assert.assertEquals
22
29
import org.junit.Rule
23
30
import org.junit.rules.Timeout
31
+ import java.time.LocalDate
32
+ import java.time.LocalDateTime
33
+ import java.time.format.DateTimeFormatter
24
34
import java.util.concurrent.Semaphore
25
35
import java.util.concurrent.TimeUnit
26
36
import java.util.concurrent.atomic.AtomicBoolean
27
37
import kotlin.coroutines.cancellation.CancellationException
28
38
import kotlin.test.*
29
39
40
+ internal object LocalDateSerializer : KSerializer<LocalDate> {
41
+ override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor (" LocalDate" , PrimitiveKind .STRING )
42
+
43
+ override fun serialize (
44
+ encoder : Encoder ,
45
+ value : LocalDate ,
46
+ ) {
47
+ encoder.encodeString(value.format(DateTimeFormatter .ISO_DATE ))
48
+ }
49
+
50
+ override fun deserialize (decoder : Decoder ): LocalDate {
51
+ return LocalDate .parse(decoder.decodeString(), DateTimeFormatter .ISO_DATE )
52
+ }
53
+ }
54
+
55
+ internal object LocalDateTimeSerializer : KSerializer<LocalDateTime> {
56
+ override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor (" LocalDateTime" , PrimitiveKind .STRING )
57
+
58
+ override fun serialize (
59
+ encoder : Encoder ,
60
+ value : LocalDateTime ,
61
+ ) {
62
+ encoder.encodeString(value.format(DateTimeFormatter .ISO_DATE_TIME ))
63
+ }
64
+
65
+ override fun deserialize (decoder : Decoder ): LocalDateTime {
66
+ return LocalDateTime .parse(decoder.decodeString(), DateTimeFormatter .ISO_DATE_TIME )
67
+ }
68
+ }
69
+
30
70
abstract class KrpcTransportTestBase {
71
+ protected val serializersModule = SerializersModule {
72
+ contextual(LocalDate ::class ) { LocalDateSerializer }
73
+ }
74
+
31
75
protected abstract val serializationConfig: KrpcSerialFormatConfiguration .() -> Unit
32
76
33
77
private val serverConfig by lazy {
@@ -112,6 +156,20 @@ abstract class KrpcTransportTestBase {
112
156
}
113
157
}
114
158
159
+ @Test
160
+ @Ignore // todo will fix in next PR
161
+ fun nonSerializableParameter () {
162
+ runBlocking {
163
+ val localDate = LocalDate .of(2001 , 8 , 23 )
164
+ val resultDate = client.nonSerializableClass(localDate)
165
+ assertEquals(localDate.plusDays(1 ), resultDate)
166
+
167
+ val localDateTime = LocalDateTime .of(2001 , 8 , 23 , 0 , 0 )
168
+ val resultDateTime = client.nonSerializableClassWithSerializer(localDateTime)
169
+ assertEquals(localDateTime.plusDays(1 ).format(DateTimeFormatter .ISO_DATE_TIME ), resultDateTime)
170
+ }
171
+ }
172
+
115
173
@Test
116
174
fun doubleGenericReturnType () {
117
175
val result = runBlocking { client.doubleGenericReturnType() }
0 commit comments