@@ -15,6 +15,7 @@ import kotlinx.datetime.toJavaLocalTime
15
15
import kotlinx.datetime.toKotlinInstant
16
16
import kotlinx.datetime.toKotlinLocalDate
17
17
import kotlinx.datetime.toKotlinLocalDateTime
18
+ import kotlinx.datetime.toKotlinLocalTime
18
19
import kotlinx.datetime.toLocalDateTime
19
20
import org.jetbrains.kotlinx.dataframe.AnyCol
20
21
import org.jetbrains.kotlinx.dataframe.DataColumn
@@ -40,6 +41,7 @@ import org.jetbrains.kotlinx.dataframe.impl.createStarProjectedType
40
41
import org.jetbrains.kotlinx.dataframe.path
41
42
import org.jetbrains.kotlinx.dataframe.type
42
43
import java.math.BigDecimal
44
+ import java.math.BigInteger
43
45
import java.net.URL
44
46
import java.util.Locale
45
47
import kotlin.math.roundToInt
@@ -332,6 +334,8 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
332
334
333
335
BigDecimal ::class -> convert<Boolean > { if (it) BigDecimal .ONE else BigDecimal .ZERO }
334
336
337
+ BigInteger ::class -> convert<Boolean > { if (it) BigInteger .ONE else BigInteger .ZERO }
338
+
335
339
else -> null
336
340
}
337
341
@@ -343,10 +347,19 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
343
347
Short ::class -> convert<Number > { it.toShort() }
344
348
Long ::class -> convert<Number > { it.toLong() }
345
349
Boolean ::class -> convert<Number > { it.toDouble() != 0.0 }
350
+ BigDecimal ::class -> convert<Number > { it.toBigDecimal() }
351
+ BigInteger ::class -> convert<Number > { it.toBigInteger() }
352
+ else -> null
353
+ }
354
+
355
+ Char ::class -> when (toClass) {
356
+ Int ::class -> convert<Char > { it.code }
346
357
else -> null
347
358
}
348
359
349
360
Int ::class -> when (toClass) {
361
+ Char ::class -> convert<Int > { it.toChar() }
362
+
350
363
Double ::class -> convert<Int > { it.toDouble() }
351
364
352
365
Float ::class -> convert<Int > { it.toFloat() }
@@ -359,6 +372,8 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
359
372
360
373
BigDecimal ::class -> convert<Int > { it.toBigDecimal() }
361
374
375
+ BigInteger ::class -> convert<Int > { it.toBigInteger() }
376
+
362
377
Boolean ::class -> convert<Int > { it != 0 }
363
378
364
379
LocalDateTime ::class -> convert<Int > { it.toLong().toLocalDateTime(defaultTimeZone) }
@@ -382,12 +397,90 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
382
397
else -> null
383
398
}
384
399
400
+ Byte ::class -> when (toClass) {
401
+ Double ::class -> convert<Byte > { it.toDouble() }
402
+
403
+ Float ::class -> convert<Byte > { it.toFloat() }
404
+
405
+ Int ::class -> convert<Byte > { it.toInt() }
406
+
407
+ Short ::class -> convert<Byte > { it.toShort() }
408
+
409
+ Long ::class -> convert<Byte > { it.toLong() }
410
+
411
+ BigDecimal ::class -> convert<Byte > { it.toBigDecimal() }
412
+
413
+ BigInteger ::class -> convert<Byte > { it.toBigInteger() }
414
+
415
+ Boolean ::class -> convert<Byte > { it != 0 .toByte() }
416
+
417
+ LocalDateTime ::class -> convert<Byte > { it.toLong().toLocalDateTime(defaultTimeZone) }
418
+
419
+ LocalDate ::class -> convert<Byte > { it.toLong().toLocalDate(defaultTimeZone) }
420
+
421
+ LocalTime ::class -> convert<Byte > { it.toLong().toLocalTime(defaultTimeZone) }
422
+
423
+ Instant ::class -> convert<Byte > { Instant .fromEpochMilliseconds(it.toLong()) }
424
+
425
+ JavaLocalDateTime ::class -> convert<Byte > {
426
+ it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
427
+ }
428
+
429
+ JavaLocalDate ::class -> convert<Byte > { it.toLong().toLocalDate(defaultTimeZone).toJavaLocalDate() }
430
+
431
+ JavaLocalTime ::class -> convert<Byte > { it.toLong().toLocalTime(defaultTimeZone).toJavaLocalTime() }
432
+
433
+ JavaInstant ::class -> convert<Byte > { JavaInstant .ofEpochMilli(it.toLong()) }
434
+
435
+ else -> null
436
+ }
437
+
438
+ Short ::class -> when (toClass) {
439
+ Double ::class -> convert<Short > { it.toDouble() }
440
+
441
+ Float ::class -> convert<Short > { it.toFloat() }
442
+
443
+ Int ::class -> convert<Short > { it.toInt() }
444
+
445
+ Byte ::class -> convert<Short > { it.toByte() }
446
+
447
+ Long ::class -> convert<Short > { it.toLong() }
448
+
449
+ BigDecimal ::class -> convert<Short > { it.toBigDecimal() }
450
+
451
+ BigInteger ::class -> convert<Short > { it.toBigInteger() }
452
+
453
+ Boolean ::class -> convert<Short > { it != 0 .toShort() }
454
+
455
+ LocalDateTime ::class -> convert<Short > { it.toLong().toLocalDateTime(defaultTimeZone) }
456
+
457
+ LocalDate ::class -> convert<Short > { it.toLong().toLocalDate(defaultTimeZone) }
458
+
459
+ LocalTime ::class -> convert<Short > { it.toLong().toLocalTime(defaultTimeZone) }
460
+
461
+ Instant ::class -> convert<Short > { Instant .fromEpochMilliseconds(it.toLong()) }
462
+
463
+ JavaLocalDateTime ::class -> convert<Short > {
464
+ it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
465
+ }
466
+
467
+ JavaLocalDate ::class -> convert<Short > { it.toLong().toLocalDate(defaultTimeZone).toJavaLocalDate() }
468
+
469
+ JavaLocalTime ::class -> convert<Short > { it.toLong().toLocalTime(defaultTimeZone).toJavaLocalTime() }
470
+
471
+ JavaInstant ::class -> convert<Short > { JavaInstant .ofEpochMilli(it.toLong()) }
472
+
473
+ else -> null
474
+ }
475
+
385
476
Double ::class -> when (toClass) {
386
477
Int ::class -> convert<Double > { it.roundToInt() }
387
478
Float ::class -> convert<Double > { it.toFloat() }
388
479
Long ::class -> convert<Double > { it.roundToLong() }
389
480
Short ::class -> convert<Double > { it.roundToInt().toShort() }
481
+ Byte ::class -> convert<Double > { it.roundToInt().toByte() }
390
482
BigDecimal ::class -> convert<Double > { it.toBigDecimal() }
483
+ BigInteger ::class -> convert<Double > { it.toBigInteger() }
391
484
Boolean ::class -> convert<Double > { it != 0.0 }
392
485
else -> null
393
486
}
@@ -405,12 +498,16 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
405
498
406
499
BigDecimal ::class -> convert<Long > { it.toBigDecimal() }
407
500
501
+ BigInteger ::class -> convert<Long > { it.toBigInteger() }
502
+
408
503
Boolean ::class -> convert<Long > { it != 0L }
409
504
410
505
LocalDateTime ::class -> convert<Long > { it.toLocalDateTime(defaultTimeZone) }
411
506
412
507
LocalDate ::class -> convert<Long > { it.toLocalDate(defaultTimeZone) }
413
508
509
+ LocalTime ::class -> convert<Long > { it.toLocalTime(defaultTimeZone) }
510
+
414
511
Instant ::class -> convert<Long > { Instant .fromEpochMilliseconds(it) }
415
512
416
513
JavaLocalDateTime ::class -> convert<Long > {
@@ -480,21 +577,38 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
480
577
Double ::class -> convert<Float > { it.toDouble() }
481
578
Long ::class -> convert<Float > { it.roundToLong() }
482
579
Int ::class -> convert<Float > { it.roundToInt() }
580
+ Byte ::class -> convert<Float > { it.roundToInt().toByte() }
483
581
Short ::class -> convert<Float > { it.roundToInt().toShort() }
484
582
BigDecimal ::class -> convert<Float > { it.toBigDecimal() }
583
+ BigInteger ::class -> convert<Float > { it.toBigInteger() }
485
584
Boolean ::class -> convert<Float > { it != 0.0F }
486
585
else -> null
487
586
}
488
587
489
588
BigDecimal ::class -> when (toClass) {
490
589
Double ::class -> convert<BigDecimal > { it.toDouble() }
491
590
Int ::class -> convert<BigDecimal > { it.toInt() }
591
+ Byte ::class -> convert<BigDecimal > { it.toByte() }
592
+ Short ::class -> convert<BigDecimal > { it.toShort() }
492
593
Float ::class -> convert<BigDecimal > { it.toFloat() }
493
594
Long ::class -> convert<BigDecimal > { it.toLong() }
595
+ BigInteger ::class -> convert<BigDecimal > { it.toBigInteger() }
494
596
Boolean ::class -> convert<BigDecimal > { it != BigDecimal .ZERO }
495
597
else -> null
496
598
}
497
599
600
+ BigInteger ::class -> when (toClass) {
601
+ Double ::class -> convert<BigInteger > { it.toDouble() }
602
+ Int ::class -> convert<BigInteger > { it.toInt() }
603
+ Byte ::class -> convert<BigInteger > { it.toByte() }
604
+ Short ::class -> convert<BigInteger > { it.toShort() }
605
+ Float ::class -> convert<BigInteger > { it.toFloat() }
606
+ Long ::class -> convert<BigInteger > { it.toLong() }
607
+ BigDecimal ::class -> convert<BigInteger > { it.toBigDecimal() }
608
+ Boolean ::class -> convert<BigInteger > { it != BigInteger .ZERO }
609
+ else -> null
610
+ }
611
+
498
612
LocalDateTime ::class -> when (toClass) {
499
613
LocalDate ::class -> convert<LocalDateTime > { it.date }
500
614
LocalTime ::class -> convert<LocalDateTime > { it.time }
@@ -565,6 +679,16 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
565
679
else -> null
566
680
}
567
681
682
+ LocalTime ::class -> when (toClass) {
683
+ JavaLocalTime ::class -> convert<LocalTime > { it.toJavaLocalTime() }
684
+ else -> null
685
+ }
686
+
687
+ JavaLocalTime ::class -> when (toClass) {
688
+ LocalTime ::class -> convert<JavaLocalTime > { it.toKotlinLocalTime() }
689
+ else -> null
690
+ }
691
+
568
692
URL ::class -> when (toClass) {
569
693
IMG ::class -> convert<URL > { IMG (it.toString()) }
570
694
IFRAME ::class -> convert<URL > { IFRAME (it.toString()) }
@@ -588,3 +712,21 @@ internal fun Instant.toLocalDate(zone: TimeZone = defaultTimeZone) = toLocalDate
588
712
internal fun Instant.toLocalTime (zone : TimeZone = defaultTimeZone) = toLocalDateTime(zone).time
589
713
590
714
internal val defaultTimeZone = TimeZone .currentSystemDefault()
715
+
716
+ internal fun Number.toBigDecimal (): BigDecimal =
717
+ when (this ) {
718
+ is BigDecimal -> this
719
+ is BigInteger -> BigDecimal (this )
720
+ is Double -> BigDecimal .valueOf(this )
721
+ is Int -> BigDecimal (this )
722
+ is Long -> BigDecimal .valueOf(this )
723
+ else -> BigDecimal .valueOf(this .toDouble())
724
+ }
725
+
726
+ internal fun Number.toBigInteger (): BigInteger =
727
+ when (this ) {
728
+ is BigInteger -> this
729
+ is BigDecimal -> this .toBigInteger()
730
+ is Long -> BigInteger .valueOf(this )
731
+ else -> BigInteger .valueOf(this .toLong())
732
+ }
0 commit comments