package com.gizwits.reactnativegizwitssdkv5 import com.facebook.react.bridge.Callback import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableNativeMap import com.gizwits.smart.sdk.GizDevice import com.gizwits.smart.sdk.GizSDKManager import com.gizwits.smart.sdk.exception.GizException import com.gizwits.smart.sdk.exception.GizParseException import com.google.gson.Gson import com.google.gson.JsonSyntaxException import com.google.gson.annotations.SerializedName interface DeviceParams{ val id: String } class RNGizParamsChecker { companion object { private fun convertReadableMapToJson(readableMap: ReadableMap): String { val readableNativeMap = readableMap as ReadableNativeMap val hashMap = readableNativeMap.toHashMap() val gson = Gson() return gson.toJson(hashMap) } fun check(options: ReadableMap, result: Callback, paramsType: Class): T? { val gson = Gson() val jsonString = convertReadableMapToJson(options) try { return gson.fromJson(jsonString, paramsType) } catch (e: JsonSyntaxException) { // 参数错误 GizRNCallbackManager.callbackWithResult( callback = result, result = Result.failure(GizException.GIZ_SDK_PARAM_INVALID) ) return null } } fun checkDeviceAndParams(options: ReadableMap, result: Callback, paramsType: Class): Pair { val config = check(options, result, paramsType) var dev: GizDevice? = null config?.let { dev = GizSDKManager.getRegisteredDevice(config.id) if (dev == null) { GizRNCallbackManager.callbackWithResult( callback = result, result = Result.failure(GizException.GIZ_OPENAPI_DEVICE_NOT_FOUND) ) } } return Pair(config, dev) } } }