diff --git a/lib/maplibre-compose/src/commonMain/kotlin/org/maplibre/compose/camera/CameraPosition.kt b/lib/maplibre-compose/src/commonMain/kotlin/org/maplibre/compose/camera/CameraPosition.kt index d5b822499..1d0198cba 100644 --- a/lib/maplibre-compose/src/commonMain/kotlin/org/maplibre/compose/camera/CameraPosition.kt +++ b/lib/maplibre-compose/src/commonMain/kotlin/org/maplibre/compose/camera/CameraPosition.kt @@ -1,6 +1,7 @@ package org.maplibre.compose.camera import androidx.compose.runtime.Immutable +import kotlinx.serialization.Serializable import org.maplibre.spatialk.geojson.Position /** @@ -13,6 +14,7 @@ import org.maplibre.spatialk.geojson.Position * @param zoom Zoom level at target. A value in the range of `[0 .. 25.5]` */ @Immutable +@Serializable public data class CameraPosition( public val bearing: Double = 0.0, public val target: Position = Position(0.0, 0.0), diff --git a/lib/maplibre-compose/src/commonTest/kotlin/org/maplibre/compose/camera/CameraPositionTest.kt b/lib/maplibre-compose/src/commonTest/kotlin/org/maplibre/compose/camera/CameraPositionTest.kt new file mode 100644 index 000000000..496681aa5 --- /dev/null +++ b/lib/maplibre-compose/src/commonTest/kotlin/org/maplibre/compose/camera/CameraPositionTest.kt @@ -0,0 +1,31 @@ +package org.maplibre.compose.camera + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import org.maplibre.spatialk.geojson.Position + +class CameraPositionTest { + @Test + fun roundTripsCameraThroughJson() { + val expected = + CameraPosition( + bearing = 42.5, + target = Position(longitude = -122.675, latitude = 45.521, altitude = 12.0), + tilt = 30.0, + zoom = 13.0, + ) + + val encoded = Json.encodeToString(expected) + + assertEquals(expected, Json.decodeFromString(encoded)) + } + + @Test + fun restoresOmittedFieldsToConstructorDefaults() { + val restored = Json.decodeFromString("{}") + + assertEquals(CameraPosition(), restored) + } +}