package com.amplitude.pluginengagementreactnative import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableArray import com.facebook.react.bridge.WritableMap fun Iterable<*>.toWritableArray(): WritableArray { val iter = this.iterator() val writableArray: WritableArray = Arguments.createArray() while (iter.hasNext()) { val value = iter.next() when (value) { null -> writableArray.pushNull() is Boolean -> writableArray.pushBoolean(value) is Double -> writableArray.pushDouble(value) is Int -> writableArray.pushInt(value) is String -> writableArray.pushString(value) is Map<*, *> -> writableArray.pushMap((value as Map).toWritableMap()) else -> throw IllegalArgumentException("Cannot convert value of type ${value.javaClass.simpleName}") } } return writableArray } fun Map.toWritableMap(): WritableMap { val writableMap: WritableMap = Arguments.createMap() val iterator = entries.iterator() while (iterator.hasNext()) { val pair = iterator.next() val value = pair.value when { value == null -> writableMap.putNull(pair.key) value is Boolean -> writableMap.putBoolean(pair.key, value) value is Double -> writableMap.putDouble(pair.key, value) value is Int -> writableMap.putInt(pair.key, value) value is String -> writableMap.putString(pair.key, value) value is Map<*, *> -> writableMap.putMap(pair.key, (value as Map).toWritableMap()) value is Iterable<*> -> writableMap.putArray(pair.key, value.toWritableArray()) else -> throw IllegalArgumentException("Cannot convert value of type ${value.javaClass.simpleName}") } } return writableMap }