package world.respect.lib.serializers import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlin.time.Duration object DurationAsISO8601Serializer: KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( "world.respect.DurationISO8601Serializer", PrimitiveKind.STRING ) override fun serialize( encoder: Encoder, value: Duration ) { encoder.encodeString(value.toIsoString()) } override fun deserialize(decoder: Decoder): Duration { return Duration.parse(decoder.decodeString()) } } typealias DurationAsISO8601 = @Serializable(with = DurationAsISO8601Serializer::class) Duration