Skip to content

Commit d9d2d30

Browse files
committed
Add seriailzation to json pointer
1 parent cb5392a commit d9d2d30

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

src/commonMain/kotlin/io/github/optimumcode/json/pointer/JsonPointer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.optimumcode.json.pointer
22

3+
import kotlinx.serialization.Serializable
34
import kotlin.jvm.JvmField
45
import kotlin.jvm.JvmStatic
56

@@ -13,6 +14,7 @@ public fun JsonPointer(path: String): JsonPointer = JsonPointer.compile(path)
1314
* Implementation of a JSON pointer described in the specification
1415
* [RFC6901](https://datatracker.ietf.org/doc/html/rfc6901).
1516
*/
17+
@Serializable(JsonPointerSerializer::class)
1618
public sealed class JsonPointer(
1719
internal open val next: JsonPointer? = null,
1820
) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.github.optimumcode.json.pointer
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.descriptors.PrimitiveKind
5+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
10+
public object JsonPointerSerializer : KSerializer<JsonPointer> {
11+
override val descriptor: SerialDescriptor =
12+
PrimitiveSerialDescriptor(
13+
"io.github.optimumcode.json.pointer.JsonPointer",
14+
PrimitiveKind.STRING,
15+
)
16+
17+
override fun deserialize(decoder: Decoder): JsonPointer = JsonPointer(decoder.decodeString())
18+
19+
override fun serialize(
20+
encoder: Encoder,
21+
value: JsonPointer,
22+
) {
23+
encoder.encodeString(value.toString())
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.github.optimumcode.json.pointer
2+
3+
import io.kotest.core.spec.style.FunSpec
4+
import io.kotest.matchers.shouldBe
5+
import kotlinx.serialization.encodeToString
6+
import kotlinx.serialization.json.Json
7+
8+
class JsonPointerSerializationTest : FunSpec() {
9+
init {
10+
listOf(
11+
JsonPointer.ROOT to "",
12+
JsonPointer("/test") to "/test",
13+
JsonPointer("/te~0st") to "/te~0st",
14+
JsonPointer("/te~1st") to "/te~1st",
15+
).forEach { (pointer, expected) ->
16+
test("json pointer $pointer serialized") {
17+
Json.encodeToString(pointer) shouldBe "\"$expected\""
18+
}
19+
20+
test("json pointer $pointer deserialized") {
21+
Json.decodeFromString(JsonPointer.serializer(), "\"$expected\"") shouldBe pointer
22+
}
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)