package com.suno.android.common_networking.ably import com.suno.android.common_core_utils.SunoLogger import kotlinx.serialization.json.Json import javax.inject.Inject /** * Parses Ably-specific JSON message format from SSE data. */ class AblyMessageParser @Inject constructor( loggerFactory: SunoLogger.Factory, private val json: Json, ) { private val logger = loggerFactory.create(this@AblyMessageParser) /** * Parses Ably JSON message from SSE event data. * * @param jsonString The JSON string from SSE data field * @return AblyEvent.Message on success, AblyEvent.Error on failure */ fun parseMessage( jsonString: String, ): AblyEvent = runCatching { val message = json.decodeFromString(jsonString).also { logger.d { "Parsed Ably message: $it" } } AblyEvent.Message(message) }.getOrElse { e -> logger.e(e) { "Failed to parse Ably message: $jsonString" } AblyEvent.Error(e) } }