Last active
April 24, 2022 02:56
-
-
Save kenvix/6523d48e95930ad764efc2b5294dbf17 to your computer and use it in GitHub Desktop.
Java InetAddress and URL serializer for kotlinx.serialization
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//-------------------------------------------------- | |
// InetAddress and URL serializer for kotlinx.serialization | |
//-------------------------------------------------- | |
// Written by Kenvix <[email protected]> | |
// Licensed under MIT license | |
//-------------------------------------------------- | |
package com.kenvix.natpoked.utils | |
import kotlinx.serialization.KSerializer | |
import kotlinx.serialization.descriptors.SerialDescriptor | |
import kotlinx.serialization.descriptors.buildClassSerialDescriptor | |
import kotlinx.serialization.encoding.Decoder | |
import kotlinx.serialization.encoding.Encoder | |
import java.net.* | |
/** | |
* InetAddress serializer for kotlinx.serialization | |
* | |
* Usage: | |
* | |
* Add below line at the top of your file: | |
* ```kotlin | |
* @file:UseSerializers(InetAddressSerializer::class, Inet6AddressSerializer::class, Inet4AddressSerializer::class) | |
* ``` | |
* | |
* @author Kenvix | |
*/ | |
object InetAddressSerializer : KSerializer<InetAddress> { | |
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("InetAddress") {} | |
override fun serialize(encoder: Encoder, value: InetAddress) { | |
encoder.encodeString(value.hostAddress) | |
} | |
override fun deserialize(decoder: Decoder): InetAddress { | |
return InetAddress.getByName(decoder.decodeString()) | |
} | |
} | |
object Inet4AddressSerializer : KSerializer<Inet4Address> { | |
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("Inet4Address") {} | |
override fun serialize(encoder: Encoder, value: Inet4Address) { | |
encoder.encodeString(value.hostAddress) | |
} | |
override fun deserialize(decoder: Decoder): Inet4Address { | |
return Inet4Address.getByName(decoder.decodeString()) as Inet4Address | |
} | |
} | |
object Inet6AddressSerializer : KSerializer<Inet6Address> { | |
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("Inet6Address") {} | |
override fun serialize(encoder: Encoder, value: Inet6Address) { | |
encoder.encodeString(value.hostAddress) | |
} | |
override fun deserialize(decoder: Decoder): Inet6Address { | |
return Inet6Address.getByName(decoder.decodeString()) as Inet6Address | |
} | |
} | |
object URLSerializer : KSerializer<URL> { | |
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("URL") {} | |
override fun serialize(encoder: Encoder, value: URL) { | |
encoder.encodeString(value.toString()) | |
} | |
override fun deserialize(decoder: Decoder): URL { | |
return URL(decoder.decodeString()) | |
} | |
} | |
object URISerializer : KSerializer<URI> { | |
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("URI") {} | |
override fun serialize(encoder: Encoder, value: URI) { | |
encoder.encodeString(value.toString()) | |
} | |
override fun deserialize(decoder: Decoder): URI { | |
return URI(decoder.decodeString()) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment