package com.blaze.rtnblazesdk.utils import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableType fun ReadableMap.getBooleanOrNull(key: String): Boolean? { return if (hasKey(key) && getType(key) == ReadableType.Boolean) { getBoolean(key) } else null } fun ReadableMap.getIntOrNull(key: String): Int? { return if (hasKey(key) && getType(key) == ReadableType.Number) { getInt(key) } else null } fun ReadableMap.getDoubleOrNull(key: String): Double? { return if (hasKey(key) && getType(key) == ReadableType.Number) { getDouble(key) } else null } fun HashMap.safeInt(key: String): Int? { return (this[key] as? Number)?.toInt() } fun HashMap.safeFloat(key: String): Float? { return (this[key] as? Number)?.toFloat() } fun Map.populateContainer( container: T, putString: T.(String, String) -> Unit, putBoolean: T.(String, Boolean) -> Unit, putInt: T.(String, Int) -> Unit, putDouble: T.(String, Double) -> Unit, putFloat: T.(String, Float) -> Unit = { key, value -> putDouble(key, value.toDouble()) }, putLong: T.(String, Long) -> Unit = { key, value -> putDouble(key, value.toDouble()) }, putDefault: T.(String, Any) -> Unit = { _, _ -> } ): T { forEach { (key, value) -> when (value) { is String -> container.putString(key, value) is Boolean -> container.putBoolean(key, value) is Int -> container.putInt(key, value) is Double -> container.putDouble(key, value) is Float -> container.putFloat(key, value) is Long -> container.putLong(key, value) else -> container.putDefault(key, value) } } return container }