diff --git a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/payload/SessionMessage.kt b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/payload/SessionMessage.kt index be9eda69f6..329faeaefb 100644 --- a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/payload/SessionMessage.kt +++ b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/payload/SessionMessage.kt @@ -3,6 +3,9 @@ package io.embrace.android.embracesdk.payload import com.squareup.moshi.Json import com.squareup.moshi.JsonClass import io.embrace.android.embracesdk.comms.api.ApiClient +import io.embrace.android.embracesdk.internal.payload.EnvelopeMetadata +import io.embrace.android.embracesdk.internal.payload.EnvelopeResource +import io.embrace.android.embracesdk.internal.payload.SessionPayload import io.embrace.android.embracesdk.internal.spans.EmbraceSpanData /** @@ -52,5 +55,32 @@ internal data class SessionMessage @JvmOverloads internal constructor( val spans: List? = null, @Json(name = "v") - val version: Int = ApiClient.MESSAGE_VERSION + val version: Int = ApiClient.MESSAGE_VERSION, + + /* + * Values below this point are copied temporarily from [Envelope]. Eventually we will migrate + * everything to use [Envelope] and [SessionPayload] and remove this class, + * but we'll keep it for now for backwards compat. + */ + + @Json(name = "resource") + val resource: EnvelopeResource? = null, + + @Json(name = "metadata") + val metadata: EnvelopeMetadata? = null, + + @Json(name = "version") + val newVersion: String? = null, + + @Json(name = "type") + val type: String? = null, + + @Json(name = "data") + val data: SessionPayload? = null ) + +/** + * Returns true if this message is a v2 payload. If so, it should be sent to a different + * endpoint & handled differently. + */ +internal fun SessionMessage.isV2Payload() = data != null diff --git a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/payload/SessionMessageTest.kt b/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/payload/SessionMessageTest.kt index 36ed4eb7a0..9b8c5fd825 100644 --- a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/payload/SessionMessageTest.kt +++ b/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/payload/SessionMessageTest.kt @@ -5,10 +5,13 @@ import io.embrace.android.embracesdk.assertJsonMatchesGoldenFile import io.embrace.android.embracesdk.deserializeEmptyJsonString import io.embrace.android.embracesdk.deserializeJsonFromResource import io.embrace.android.embracesdk.fakes.fakeSession +import io.embrace.android.embracesdk.internal.payload.SessionPayload import io.embrace.android.embracesdk.internal.spans.EmbraceSpanData import io.opentelemetry.api.trace.StatusCode import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue import org.junit.Test internal class SessionMessageTest { @@ -66,4 +69,11 @@ internal class SessionMessageTest { fun testEmptyObject() { deserializeEmptyJsonString() } + + @Test + fun `is v2 payload`() { + assertFalse(info.isV2Payload()) + val obj = SessionMessage(session = session, data = SessionPayload()) + assertTrue(obj.isV2Payload()) + } }