Skip to content

Commit 7dfd8e0

Browse files
committed
add serialization support to ulid class
1 parent 6bdca24 commit 7dfd8e0

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

kulid/src/commonMain/kotlin/dev/phillipslabs/kulid/ULID.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import kotlinx.datetime.Clock
44
import kotlinx.io.Buffer
55
import kotlinx.io.bytestring.ByteString
66
import kotlinx.io.readByteString
7+
import kotlinx.serialization.Serializable
78
import org.kotlincrypto.random.CryptoRand
89
import kotlin.jvm.JvmInline
910
import kotlin.math.absoluteValue
@@ -28,7 +29,7 @@ private const val ULID_ENCODING_FRONT_PADDING = ENCODED_ULID_BYTE_SIZE * 5 - ULI
2829
// Crockford's base32 alphabet
2930
private val ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray()
3031

31-
// @Serializable
32+
@Serializable(with = ULIDSerializer::class)
3233
@JvmInline
3334
public value class ULID private constructor(
3435
public val value: ByteString,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package dev.phillipslabs.kulid
2+
3+
import kotlinx.serialization.ExperimentalSerializationApi
4+
import kotlinx.serialization.KSerializer
5+
import kotlinx.serialization.descriptors.PrimitiveKind
6+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
7+
import kotlinx.serialization.descriptors.SerialDescriptor
8+
import kotlinx.serialization.encoding.Decoder
9+
import kotlinx.serialization.encoding.Encoder
10+
11+
@OptIn(ExperimentalSerializationApi::class)
12+
public object ULIDSerializer : KSerializer<ULID> {
13+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ULID", PrimitiveKind.STRING)
14+
15+
override fun serialize(
16+
encoder: Encoder,
17+
value: ULID,
18+
) {
19+
encoder.encodeString(value.toString())
20+
}
21+
22+
override fun deserialize(decoder: Decoder): ULID = ULID.fromString(decoder.decodeString())
23+
}

0 commit comments

Comments
 (0)