File tree Expand file tree Collapse file tree
kulid/src/commonMain/kotlin/dev/phillipslabs/kulid Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import kotlinx.datetime.Clock
44import kotlinx.io.Buffer
55import kotlinx.io.bytestring.ByteString
66import kotlinx.io.readByteString
7+ import kotlinx.serialization.Serializable
78import org.kotlincrypto.random.CryptoRand
89import kotlin.jvm.JvmInline
910import 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
2930private val ENCODING_CHARS = " 0123456789ABCDEFGHJKMNPQRSTVWXYZ" .toCharArray()
3031
31- // @Serializable
32+ @Serializable(with = ULIDSerializer :: class )
3233@JvmInline
3334public value class ULID private constructor(
3435 public val value : ByteString ,
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments