@@ -74,7 +74,6 @@ class SerializationFactory(
7474 val map = ConcurrentHashMap <SerializerKey , JsonSerializer <Any >>()
7575
7676 map[SerializerKey (String ::class .java)] = StringSerializer as JsonSerializer <Any >
77- map[SerializerKey (ByteArray ::class .java)] = ByteArraySerializer as JsonSerializer <Any >
7877 map[SerializerKey (Int ::class .java)] = IntSerializer as JsonSerializer <Any >
7978 map[SerializerKey (Long ::class .java)] = LongSerializer as JsonSerializer <Any >
8079 map[SerializerKey (Double ::class .java)] = DoubleSerializer as JsonSerializer <Any >
@@ -137,6 +136,8 @@ class SerializationFactory(
137136
138137 override val valueType = SerializerKey .fromSuperclassTypeArgument(PrimitiveTypeSerializer ::class , this ::class )
139138 override fun generateSchema (generator : JsonSchemaGenerator ) = schema
139+
140+ abstract fun fromMultiPartFormValue (formValue : FormData .FormValue ) : T
140141 }
141142
142143 /* * Built-in serializer for atomic value of type [String] */
@@ -156,25 +157,13 @@ class SerializationFactory(
156157 override fun toJson (obj : String , generator : JsonGenerator ) {
157158 generator.write(obj)
158159 }
159- }
160160
161- /* * Built-in serializer for atomic value of type [ByteArray] */
162- object ByteArraySerializer : PrimitiveTypeSerializer<ByteArray>(" string" ) {
163- override fun fromJson (value : JsonValue ): ByteArray {
164- return when (value.valueType) {
165- // provide limited number of type conversions
166- JsonValue .ValueType .TRUE -> true .toString().base64ToByteArray()
167- JsonValue .ValueType .FALSE -> false .toString().base64ToByteArray()
168- JsonValue .ValueType .NULL -> " " .base64ToByteArray()
169- JsonValue .ValueType .NUMBER -> value.toString().base64ToByteArray()
170- JsonValue .ValueType .STRING -> (value as JsonString ).string.base64ToByteArray()
171- else -> throw AssertionError (" Expected string, got ${value.valueType} with value $value " )
161+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): String {
162+ return when (formValue.value.isNotEmpty()) {
163+ true -> formValue.value
164+ false -> " "
172165 }
173166 }
174-
175- override fun toJson (obj : ByteArray , generator : JsonGenerator ) {
176- generator.write(String (obj))
177- }
178167 }
179168
180169 /* * Built-in serializer for atomic value of type [Int] */
@@ -191,6 +180,13 @@ class SerializationFactory(
191180 override fun toJson (obj : Int , generator : JsonGenerator ) {
192181 generator.write(obj)
193182 }
183+
184+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): Int {
185+ return when (formValue.value.isNotEmpty()) {
186+ true -> Integer .parseInt(formValue.value)
187+ false -> 0
188+ }
189+ }
194190 }
195191
196192 /* * Built-in serializer for atomic value of type [Long] */
@@ -207,6 +203,13 @@ class SerializationFactory(
207203 override fun toJson (obj : Long , generator : JsonGenerator ) {
208204 generator.write(obj)
209205 }
206+
207+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): Long {
208+ return when (formValue.value.isNotEmpty()) {
209+ true -> formValue.value.toLong()
210+ false -> 0
211+ }
212+ }
210213 }
211214
212215 /* * Built-in serializer for atomic value of type [Double] */
@@ -223,6 +226,13 @@ class SerializationFactory(
223226 override fun toJson (obj : Double , generator : JsonGenerator ) {
224227 generator.write(obj)
225228 }
229+
230+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): Double {
231+ return when (formValue.value.isNotEmpty()) {
232+ true -> formValue.value.toDouble()
233+ false -> 0.0
234+ }
235+ }
226236 }
227237
228238 /* * Built-in serializer for atomic value of type [Float] */
@@ -239,6 +249,13 @@ class SerializationFactory(
239249 override fun toJson (obj : Float , generator : JsonGenerator ) {
240250 generator.write(obj.toDouble())
241251 }
252+
253+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): Float {
254+ return when (formValue.value.isNotEmpty()) {
255+ true -> formValue.value.toFloat()
256+ false -> 0.0 .toFloat()
257+ }
258+ }
242259 }
243260
244261 /* * Built-in serializer for atomic value of type [Boolean] */
@@ -255,6 +272,13 @@ class SerializationFactory(
255272 override fun toJson (obj : Boolean , generator : JsonGenerator ) {
256273 generator.write(obj)
257274 }
275+
276+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ): Boolean {
277+ return when (formValue.value.isNotEmpty()) {
278+ true -> formValue.value.toBoolean()
279+ else -> throw AssertionError (" Expected , boolean got ${formValue.value} " )
280+ }
281+ }
258282 }
259283
260284 /* * Serializer for Kotlin type [Unit] */
@@ -269,6 +293,13 @@ class SerializationFactory(
269293 override fun toJson (obj : Unit , generator : JsonGenerator ) {
270294 generator.write(obj.toString())
271295 }
296+
297+ override fun fromMultiPartFormValue (formValue : FormData .FormValue ) {
298+ return when (formValue.value.isNullOrEmpty()) {
299+ true -> Unit
300+ else -> throw AssertionError (" Expected unit, got ${formValue.value} " )
301+ }
302+ }
272303 }
273304
274305 // FIXME use url format for the schema
0 commit comments