Skip to content

Commit 5379414

Browse files
committed
WIP decode from CborElement
1 parent b8cee5b commit 5379414

File tree

4 files changed

+474
-56
lines changed

4 files changed

+474
-56
lines changed

formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,26 @@ public sealed class Cbor(
8989
return reader.decodeSerializableValue(deserializer)
9090
}
9191

92+
public fun <T> decodeFromCbor(deserializer: DeserializationStrategy<T>, element: CborElement): T {
93+
val reader = StructuredCborReader(this, StructuredCborParser(element, configuration.verifyObjectTags))
94+
return reader.decodeSerializableValue(deserializer)
95+
}
9296

93-
public fun <T> encodeToCbor(serializer: SerializationStrategy<T>, value: T): CborElement {
97+
public fun <T> encodeToCbor(serializer: SerializationStrategy<T>, value: T): CborElement {
9498
val writer = StructuredCborWriter(this)
9599
writer.encodeSerializableValue(serializer, value)
96-
return writer.finalize()
100+
return writer.finalize()
97101
}
98102
}
99103

100104
@ExperimentalSerializationApi
101105
public inline fun <reified T> Cbor.encodeToCbor(value: T): CborElement =
102106
encodeToCbor(serializersModule.serializer(), value)
103107

108+
@ExperimentalSerializationApi
109+
public inline fun <reified T> Cbor.decodeFromCbor(element: CborElement): T =
110+
decodeFromCbor(serializersModule.serializer(), element)
111+
104112
@OptIn(ExperimentalSerializationApi::class)
105113
private class CborImpl(
106114
configuration: CborConfiguration,
@@ -119,18 +127,20 @@ private class CborImpl(
119127
public fun Cbor(from: Cbor = Cbor, builderAction: CborBuilder.() -> Unit): Cbor {
120128
val builder = CborBuilder(from)
121129
builder.builderAction()
122-
return CborImpl(CborConfiguration(
123-
builder.encodeDefaults,
124-
builder.ignoreUnknownKeys,
125-
builder.encodeKeyTags,
126-
builder.encodeValueTags,
127-
builder.encodeObjectTags,
128-
builder.verifyKeyTags,
129-
builder.verifyValueTags,
130-
builder.verifyObjectTags,
131-
builder.useDefiniteLengthEncoding,
132-
builder.preferCborLabelsOverNames,
133-
builder.alwaysUseByteString),
130+
return CborImpl(
131+
CborConfiguration(
132+
builder.encodeDefaults,
133+
builder.ignoreUnknownKeys,
134+
builder.encodeKeyTags,
135+
builder.encodeValueTags,
136+
builder.encodeObjectTags,
137+
builder.verifyKeyTags,
138+
builder.verifyValueTags,
139+
builder.verifyObjectTags,
140+
builder.useDefiniteLengthEncoding,
141+
builder.preferCborLabelsOverNames,
142+
builder.alwaysUseByteString
143+
),
134144
builder.serializersModule
135145
)
136146
}

0 commit comments

Comments
 (0)