package com.bitmovin.player.reactnative.extensions import com.facebook.react.bridge.* fun ReadableMap.getBooleanOrNull(key: String): Boolean? = getValueOrNull(key, ReadableMap::getBoolean) fun ReadableMap.getIntOrNull(key: String): Int? = getValueOrNull(key, ReadableMap::getInt) fun ReadableMap.getDoubleOrNull(key: String): Double? = getValueOrNull(key, ReadableMap::getDouble) inline fun ReadableMap.getValueOrNull( key: String, get: ReadableMap.(String) -> T?, ) = takeIf { hasKey(key) }?.get(key) inline fun ReadableMap.withDouble( key: String, block: (Double) -> T, ): T? = mapValue(key, ReadableMap::getDouble, block) inline fun ReadableMap.withMap( key: String, block: (ReadableMap) -> T, ): T? = mapValue(key, ReadableMap::getMap, block) inline fun ReadableMap.withInt( key: String, block: (Int) -> T, ): T? = mapValue(key, ReadableMap::getInt, block) inline fun ReadableMap.withBoolean( key: String, block: (Boolean) -> T, ): T? = mapValue(key, ReadableMap::getBoolean, block) inline fun ReadableMap.withString( key: String, block: (String) -> T, ): T? = mapValue(key, ReadableMap::getString, block) inline fun ReadableMap.withArray( key: String, block: (ReadableArray) -> T, ): T? = mapValue(key, ReadableMap::getArray, block) inline fun ReadableMap.withStringArray( key: String, block: (List) -> T, ): T? = mapValue(key, ReadableMap::getStringArray, block) fun ReadableMap.getStringArray(it: String): List? = getArray(it)?.toStringList() inline fun ReadableMap.mapValue( key: String, get: ReadableMap.(String) -> T?, block: (T) -> R, ) = getValueOrNull(key, get)?.let(block) inline fun ReadableMap.toMap(): Map = toHashMap().mapValues { it.value as T }