Skip to content

Instantly share code, notes, and snippets.

@jkbbwr

jkbbwr/serde.kt Secret

Created November 6, 2015 13:44
Show Gist options
  • Save jkbbwr/7976b6cfd49eb79572b8 to your computer and use it in GitHub Desktop.
Save jkbbwr/7976b6cfd49eb79572b8 to your computer and use it in GitHub Desktop.
package works.credits.core
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.databind.module.SimpleModule
import org.abstractj.kalium.keys.SigningKey
import org.abstractj.kalium.keys.VerifyKey
import org.msgpack.jackson.dataformat.MessagePackGenerator
import org.msgpack.jackson.dataformat.MessagePackParser
class VerifyKeySerializer(): JsonSerializer<VerifyKey>() {
override fun serialize(vk: VerifyKey?, jgen: JsonGenerator?, p: SerializerProvider?) {
val mgen = jgen as MessagePackGenerator
if (vk == null) {
mgen.writeBinary(ByteArray(0))
} else {
mgen.writeBinary(vk.toBytes())
}
}
}
class VerifyKeyDeserializer(): JsonDeserializer<VerifyKey>() {
override fun deserialize(jp: JsonParser, ctx: DeserializationContext): VerifyKey? {
val mp = jp as MessagePackParser
val bytes = mp.readValueAs(ByteArray::class.java)
return VerifyKey(bytes)
}
}
class SigningKeySerializer(): JsonSerializer<SigningKey?>() {
override fun serialize(sk: SigningKey?, jgen: JsonGenerator, p: SerializerProvider) {
val mgen = jgen as MessagePackGenerator
if (sk == null) {
mgen.writeBinary(ByteArray(0))
} else {
mgen.writeBinary(sk.toBytes())
}
}
}
class SigningKeyDeserializer(): JsonDeserializer<SigningKey?>() {
override fun deserialize(jp: JsonParser, ctx: DeserializationContext): SigningKey? {
val mp = jp as MessagePackParser
val bytes = mp.readValueAs(ByteArray::class.java)
if (bytes.size == 0) {
return null
}
return SigningKey(bytes)
}
}
fun ObjectMapper.registerCreditsModule(): ObjectMapper {
val credits = SimpleModule("credits")
credits.addSerializer(SigningKey::class.java, SigningKeySerializer())
credits.addDeserializer(SigningKey::class.java, SigningKeyDeserializer())
credits.addSerializer(VerifyKey::class.java, VerifyKeySerializer())
credits.addDeserializer(VerifyKey::class.java, VerifyKeyDeserializer())
this.registerModule(credits)
return this
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment