Skip to content

Commit f1a450c

Browse files
author
Sven Obser
committed
Update to kotlinx.serialization 0.20.0 and Kotlin 1.3.72
1 parent e4a9b01 commit f1a450c

38 files changed

+249
-225
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ open classes should be avoided.
1515
## Gradle Dependencies
1616
```kotlin
1717
// Kotlin Serialization CSV
18-
implementation("de.brudaswen.kotlinx.serialization:kotlinx-serialization-csv:0.1.0")
18+
implementation("de.brudaswen.kotlinx.serialization:kotlinx-serialization-csv:0.2.0")
1919

2020
// Kotlin Serialization is added automatically, but can be added to force a specific version
21-
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
21+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0")
2222
```
2323

2424
## Usage
@@ -84,7 +84,6 @@ CSV serialization and parsing options can be changed by providing a custom `CsvC
8484
| `quoteMode` | `MINIMAL` | The quote mode used to decide if a column value should get quoted.<ul><li>`ALL`: Quotes *all* fields.</li><li>`ALL_NON_NULL`: Quotes all *non-null fields* and *fields which contain special characters*.</li><li>`ALL_NON_NUMERIC`: Quotes all *non-numeric fields* and *fields which contain special characters*.</li><li>`MINIMAL`: Quotes *fields which contain special characters*.</li><li>`NONE`: *Never* quotes fields (requires `CsvConfiguration.escapeChar` to be set).</li></ul> |
8585
| `escapeChar` | `null` (`\\` for `QuoteMode.NONE`) | The escape character used to escape reserved characters in a column value. |
8686
| `nullString` | *empty string* | The value to identify `null` values. |
87-
| `unitString` | `Unit` | The value to identify `Unit` values. |
8887
| `ignoreEmptyLines` | `true` | Ignore empty lines during parsing. |
8988
| `hasHeaderRecord` | `false` | First line is header record. |
9089
| `headerSeparator` | `.` | Character that is used to separate hierarchical header names. |
@@ -94,7 +93,7 @@ CSV serialization and parsing options can be changed by providing a custom `CsvC
9493

9594
| Dependency | Versions |
9695
|--- |--- |
97-
| *Kotlin Serialization* | 0.14.0 |
96+
| *Kotlin Serialization* | 0.20.0 |
9897

9998
## License
10099

application/src/main/kotlin/de/brudaswen/kotlinx/serialization/example/Example.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package de.brudaswen.kotlinx.serialization.example
33
import kotlinx.serialization.Serializable
44
import kotlinx.serialization.csv.Csv
55
import kotlinx.serialization.csv.CsvConfiguration
6-
import kotlinx.serialization.list
6+
import kotlinx.serialization.builtins.list
77

88
@Serializable
99
data class Person(val nickname: String, val name: String?, val appearance: Appearance)

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
plugins {
22
base
3-
kotlin("jvm") version "1.3.61" apply false
3+
kotlin("jvm") version "1.3.72" apply false
44
id("net.researchgate.release") version "2.6.0"
55
id("io.codearte.nexus-staging") version "0.21.2"
66
}
77

8-
val serializationVersion = "0.14.0"
8+
val serializationVersion = "0.20.0"
99

1010
allprojects {
1111
group = "de.brudaswen.kotlinx.serialization"

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=0.1.1-SNAPSHOT
1+
version=0.2.0-SNAPSHOT
22
kotlin.code.style=official
33

44
# Disable generation of metadata sha256/sha512 checksum

library/src/main/kotlin/kotlinx/serialization/csv/Csv.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ import kotlinx.serialization.modules.SerialModule
2323
*/
2424
class Csv(
2525
internal val configuration: CsvConfiguration,
26-
context: SerialModule = EmptyModule
27-
) : AbstractSerialFormat(context), StringFormat {
26+
override val context: SerialModule = EmptyModule
27+
) : SerialFormat, StringFormat {
2828

2929
/**
30-
* Serialize [obj] into CSV record(s).
30+
* Serialize [value] into CSV record(s).
3131
*
3232
* @param serializer The serializer used to serialize the given object.
33-
* @param obj The [Serializable] object.
33+
* @param value The [Serializable] object.
3434
*/
35-
override fun <T> stringify(serializer: SerializationStrategy<T>, obj: T): String {
35+
override fun <T> stringify(serializer: SerializationStrategy<T>, value: T): String {
3636
val result = StringBuilder()
37-
RootCsvEncoder(this, result).encode(serializer, obj)
37+
RootCsvEncoder(this, result).encode(serializer, value)
3838
return result.toString()
3939
}
4040

@@ -78,19 +78,18 @@ class Csv(
7878
*/
7979
val rfc4180 = Csv(CsvConfiguration.rfc4180)
8080

81-
@UseExperimental(UnstableDefault::class)
8281
override val context: SerialModule
8382
get() = default.context
8483

8584
/**
86-
* Serialize [obj] into CSV record(s) using [CsvConfiguration.default].
85+
* Serialize [value] into CSV record(s) using [CsvConfiguration.default].
8786
*
8887
* @param serializer The serializer used to serialize the given object.
89-
* @param obj The [Serializable] object.
88+
* @param value The [Serializable] object.
9089
*/
9190
@UnstableDefault
92-
override fun <T> stringify(serializer: SerializationStrategy<T>, obj: T): String =
93-
default.stringify(serializer, obj)
91+
override fun <T> stringify(serializer: SerializationStrategy<T>, value: T): String =
92+
default.stringify(serializer, value)
9493

9594
/**
9695
* Parse CSV [string] into [Serializable] object using [CsvConfiguration.default].

library/src/main/kotlin/kotlinx/serialization/csv/CsvConfiguration.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package kotlinx.serialization.csv
99
* @param quoteMode The quote mode used to decide if a column value should get quoted (default: `MINIMAL`).
1010
* @param escapeChar The escape character used to escape reserved characters in a column value.
1111
* @param nullString The value to identify `null` values (default: empty string).
12-
* @param unitString The value to identify [Unit] values (default: `Unit`).
1312
* @param ignoreEmptyLines Ignore empty lines during parsing (default: `true`).
1413
* @param hasHeaderRecord First line is header record (default: `false`).
1514
* @param headerSeparator Character that is used to separate hierarchical header names (default: `.`).
@@ -22,7 +21,6 @@ data class CsvConfiguration(
2221
val quoteMode: QuoteMode = QuoteMode.MINIMAL,
2322
val escapeChar: Char? = if (quoteMode == QuoteMode.NONE) '\\' else null,
2423
val nullString: String = "",
25-
val unitString: String = Unit.toString(),
2624
val ignoreEmptyLines: Boolean = true,
2725
val hasHeaderRecord: Boolean = false,
2826
val headerSeparator: Char = '.',
@@ -37,10 +35,6 @@ data class CsvConfiguration(
3735
"The escapeChar character and the delimiter cannot be the same ('$delimiter')."
3836
}
3937

40-
require(nullString != unitString) {
41-
"The nullString and the unitString cannot be the same ('$nullString')."
42-
}
43-
4438
if (quoteMode == QuoteMode.NONE) {
4539
require(escapeChar != null) {
4640
"The QuoteMode NONE requires an escapeChar."

library/src/main/kotlin/kotlinx/serialization/csv/decode/ClassCsvDecoder.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,29 @@ internal class ClassCsvDecoder(
2020

2121
private var elementIndex = 0
2222

23-
override fun decodeElementIndex(desc: SerialDescriptor): Int = when {
24-
reader.isDone || elementIndex >= desc.elementsCount -> CompositeDecoder.READ_DONE
23+
override fun decodeElementIndex(descriptor: SerialDescriptor): Int = when {
24+
reader.isDone || elementIndex >= descriptor.elementsCount -> CompositeDecoder.READ_DONE
2525
classHeaders != null -> classHeaders[elementIndex]
2626
else -> elementIndex
2727
}
2828

29-
override fun beginStructure(desc: SerialDescriptor, vararg typeParams: KSerializer<*>): CompositeDecoder {
30-
return when (desc.kind) {
29+
override fun beginStructure(descriptor: SerialDescriptor, vararg typeParams: KSerializer<*>): CompositeDecoder {
30+
return when (descriptor.kind) {
3131
StructureKind.CLASS ->
3232
ClassCsvDecoder(
3333
csv,
3434
reader,
3535
this,
36-
classHeaders?.getSubHeaders(decodeElementIndex(desc))
36+
classHeaders?.getSubHeaders(decodeElementIndex(descriptor))
3737
)
3838

3939
else ->
40-
super.beginStructure(desc, *typeParams)
40+
super.beginStructure(descriptor, *typeParams)
4141
}
4242
}
4343

44-
override fun endChildStructure(desc: SerialDescriptor) {
45-
super.endChildStructure(desc)
44+
override fun endChildStructure(descriptor: SerialDescriptor) {
45+
super.endChildStructure(descriptor)
4646
elementIndex++
4747
}
4848

library/src/main/kotlin/kotlinx/serialization/csv/decode/CollectionCsvDecoder.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package kotlinx.serialization.csv.decode
22

3+
import kotlinx.serialization.CompositeDecoder
34
import kotlinx.serialization.SerialDescriptor
45
import kotlinx.serialization.csv.Csv
56

@@ -14,5 +15,25 @@ internal class CollectionCsvDecoder(
1415
parent: CsvDecoder
1516
) : CsvDecoder(csv, reader, parent) {
1617

17-
override fun decodeCollectionSize(desc: SerialDescriptor) = decodeInt()
18+
private var elementIndex = 0
19+
20+
override fun decodeSequentially(): Boolean = true
21+
22+
override fun decodeElementIndex(descriptor: SerialDescriptor): Int = when {
23+
reader.isDone || elementIndex >= descriptor.elementsCount -> CompositeDecoder.READ_DONE
24+
else -> elementIndex
25+
}
26+
27+
override fun decodeCollectionSize(descriptor: SerialDescriptor) = decodeInt()
28+
29+
override fun endChildStructure(descriptor: SerialDescriptor) {
30+
super.endChildStructure(descriptor)
31+
elementIndex++
32+
}
33+
34+
override fun decodeColumn(): String {
35+
val value = super.decodeColumn()
36+
elementIndex++
37+
return value
38+
}
1839
}

library/src/main/kotlin/kotlinx/serialization/csv/decode/CollectionRecordCsvDecoder.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ internal class CollectionRecordCsvDecoder(
2121

2222
private val recordNo = reader.recordNo
2323

24-
override fun decodeElementIndex(desc: SerialDescriptor): Int = when {
24+
override fun decodeElementIndex(descriptor: SerialDescriptor): Int = when {
2525
// TODO Check for END_OF_RECORD
2626
reader.isDone || reader.recordNo != recordNo -> CompositeDecoder.READ_DONE
2727
else -> elementIndex
2828
}
2929

30-
override fun endChildStructure(desc: SerialDescriptor) {
31-
super.endChildStructure(desc)
30+
override fun endChildStructure(descriptor: SerialDescriptor) {
31+
super.endChildStructure(descriptor)
3232
elementIndex++
3333
}
3434

library/src/main/kotlin/kotlinx/serialization/csv/decode/CsvDecoder.kt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kotlinx.serialization.csv.decode
22

33
import kotlinx.serialization.*
4+
import kotlinx.serialization.builtins.AbstractDecoder
45
import kotlinx.serialization.csv.Csv
56
import kotlinx.serialization.csv.CsvConfiguration
67
import kotlinx.serialization.modules.SerialModule
@@ -12,7 +13,7 @@ internal abstract class CsvDecoder(
1213
protected val csv: Csv,
1314
protected val reader: CsvReader,
1415
private val parent: CsvDecoder?
15-
) : ElementValueDecoder() {
16+
) : AbstractDecoder() {
1617

1718
override val context: SerialModule
1819
get() = csv.context
@@ -22,34 +23,34 @@ internal abstract class CsvDecoder(
2223

2324
protected var headers: Headers? = null
2425

25-
override fun beginStructure(desc: SerialDescriptor, vararg typeParams: KSerializer<*>): CompositeDecoder {
26-
return when (desc.kind) {
26+
override fun beginStructure(descriptor: SerialDescriptor, vararg typeParams: KSerializer<*>): CompositeDecoder {
27+
return when (descriptor.kind) {
2728
StructureKind.LIST,
2829
StructureKind.MAP ->
2930
CollectionCsvDecoder(csv, reader, this)
3031

3132
StructureKind.CLASS ->
3233
ClassCsvDecoder(csv, reader, this, headers)
3334

34-
UnionKind.OBJECT ->
35+
StructureKind.OBJECT ->
3536
ObjectCsvDecoder(csv, reader, this)
3637

3738
PolymorphicKind.SEALED ->
38-
SealedCsvDecoder(csv, reader, this, desc)
39+
SealedCsvDecoder(csv, reader, this, descriptor)
3940

4041
PolymorphicKind.OPEN ->
4142
ClassCsvDecoder(csv, reader, this, headers)
4243

4344
else ->
44-
error("CSV does not support '${desc.kind}'.")
45+
error("CSV does not support '${descriptor.kind}'.")
4546
}
4647
}
4748

48-
override fun endStructure(desc: SerialDescriptor) {
49-
parent?.endChildStructure(desc)
49+
override fun endStructure(descriptor: SerialDescriptor) {
50+
parent?.endChildStructure(descriptor)
5051
}
5152

52-
protected open fun endChildStructure(desc: SerialDescriptor) {
53+
protected open fun endChildStructure(descriptor: SerialDescriptor) {
5354
}
5455

5556
override fun decodeByte(): Byte {
@@ -100,13 +101,8 @@ internal abstract class CsvDecoder(
100101
return null
101102
}
102103

103-
override fun decodeUnit() {
104-
val value = decodeColumn()
105-
require(value == configuration.unitString) { "Expected '${configuration.unitString}' but was '$value'." }
106-
}
107-
108-
override fun decodeEnum(enumDescription: SerialDescriptor): Int {
109-
return enumDescription.getElementIndex(decodeColumn())
104+
override fun decodeEnum(enumDescriptor: SerialDescriptor): Int {
105+
return enumDescriptor.getElementIndex(decodeColumn())
110106
}
111107

112108
protected open fun decodeColumn() = reader.readColumn()

0 commit comments

Comments
 (0)