Skip to content

Commit

Permalink
add java serialization support for Id and RawId
Browse files Browse the repository at this point in the history
  • Loading branch information
Adrian Tosca committed May 20, 2024
1 parent 4c18883 commit fa028ea
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 6 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# typeid-kotlin
![Build Status](https://github.com/aleris/typeid-kotlin/actions/workflows/build-on-push.yml/badge.svg)
![Current Version](https://img.shields.io/badge/Version-0.0.8-blue)
![Current Version](https://img.shields.io/badge/Version-0.0.9-blue)


## A Kotlin implementation of [TypeID](https://github.com/jetpack-io/typeid).
Expand All @@ -25,14 +25,14 @@ To use with Maven:
<dependency>
<groupId>earth.adi</groupId>
<artifactId>typeid-kotlin</artifactId>
<version>0.0.8</version>
<version>0.0.9</version>
</dependency>
```

To use via Gradle:

```kotlin
implementation("earth.adi:typeid-kotlin:0.0.8")
implementation("earth.adi:typeid-kotlin:0.0.9")
```


Expand Down
3 changes: 2 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {

group = "earth.adi"

version = "0.0.8"
version = "0.0.9"

repositories { mavenCentral() }

Expand Down Expand Up @@ -159,6 +159,7 @@ tasks.publish { dependsOn(tasks.dokkaHtml) }

jreleaser {
project {
name.set(mavenArtifactId)
description.set(mavenArtifactDescription)
authors.set(arrayListOf("aleris"))
license.set("Apache-2.0")
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/earth/adi/typeid/RawId.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package earth.adi.typeid

import earth.adi.typeid.codec.Codec
import java.io.Serializable
import java.util.UUID

/**
Expand All @@ -10,7 +11,7 @@ import java.util.UUID
* @property prefix the prefix of the identifier
* @property uuid the uuid of the identifier
*/
data class RawId(val prefix: String, val uuid: UUID) {
data class RawId(val prefix: String, val uuid: UUID) : Serializable {
init {
Codec.requireValidPrefix(prefix)
}
Expand Down
4 changes: 3 additions & 1 deletion src/main/kotlin/earth/adi/typeid/TypedPrefix.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package earth.adi.typeid

import java.io.Serializable

/** Typed prefix for a type id. */
data class TypedPrefix<TEntity>(val prefix: String)
data class TypedPrefix<TEntity>(val prefix: String) : Serializable
16 changes: 16 additions & 0 deletions src/test/kotlin/earth/adi/typeid/IdTest.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package earth.adi.typeid

import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.util.*
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.assertThatThrownBy
Expand Down Expand Up @@ -30,4 +33,17 @@ class IdTest {
val id = Id<String>(TypedPrefix("user"), uuid)
assertThat(id.uuid).isEqualTo(uuid)
}

@Test
fun `test serialization deserialization`() {
val uuid = UUID.fromString("00000000-0000-0000-0000-000000000000")
val id = Id<String>(TypedPrefix("user"), uuid)
ByteArrayOutputStream().use { outputStream ->
ObjectOutputStream(outputStream).writeObject(id)
ObjectInputStream(outputStream.toByteArray().inputStream()).use {
@Suppress("UNCHECKED_CAST") val deserializedId = it.readObject() as Id<String>
assertThat(deserializedId).isEqualTo(id)
}
}
}
}
16 changes: 16 additions & 0 deletions src/test/kotlin/earth/adi/typeid/RawIdTest.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package earth.adi.typeid

import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.util.*
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.*
Expand All @@ -17,4 +20,17 @@ class RawIdTest {
val uuid = UUID.randomUUID()
assertThat(RawId("prefix", uuid).uuid).isEqualTo(uuid)
}

@Test
fun `test serialization deserialization`() {
val uuid = UUID.fromString("00000000-0000-0000-0000-000000000000")
val id = RawId("user", uuid)
ByteArrayOutputStream().use { outputStream ->
ObjectOutputStream(outputStream).writeObject(id)
ObjectInputStream(outputStream.toByteArray().inputStream()).use {
val deserializedId = it.readObject() as RawId
assertThat(deserializedId).isEqualTo(id)
}
}
}
}

0 comments on commit fa028ea

Please sign in to comment.