package com.convenient.android.common.extension

import com.convenient.android.common.utils.string.GsonUtil
import com.convenient.android.common.utils.string.SerializableUtil

/**
 * @classname:
 * @author: LiuXiaoLong
 * @date: 2022/8/2
 * description:序列化、json相关扩展
 */



/**
 * json 转bean对象
 * "xxx".jsonToBean<Bean>() : Bean
 */
inline fun <reified T> String.jsonToBean(): T? = GsonUtil.jsonToBean(this, T::class.java)

/**
 * bean类转json
 * bean.toJson() : String
 */
fun Any.toJson(): String? = GsonUtil.objectToJson(this)

/**
 * json 转list
 * "xxx".jsonToList<Bean>() : List<Bean>
 */
inline fun <reified T> String.jsonToList(): List<T> {
    return GsonUtil.jsonToList(jsonStr = this, T::class.java)
}

/**
 * json 转map
 * "xxx".jsonToMap<String, Any>() : Map<String, Any>
 */
inline fun <reified K, reified V> String.jsonToMap(): Map<K, V> = GsonUtil.jsonToMap(this)


/**
 * 获取json中 对应key的值
 */
fun <T : Any> String.getJsonValue(key: String): T? = GsonUtil.getJsonValue(this, key)


/** -------- 序列化相关扩展 ---------**/
/**
 * 集合序列化
 * @return 序列化后的字符串
 */
inline fun <reified E> List<E>.serializable(): String = SerializableUtil.listToString(this)

/**
 * map 序列化
 */
fun Map<Any, Any>.serializable(): String = SerializableUtil.mapToString(this)

/**
 * 序列化字符串转map
 */
fun String.serializableToMap(): Map<*, *>? = SerializableUtil.strToMap(this)

/**
 * 已实现序列化的Bean类进行序列化
 * @return 序列化后的字符串
 */
fun Any.objSerializable(): String = SerializableUtil.objToStr(this)

/**
 * 序列化字符串转bean
 */
fun <E> String.serializableToBean(): E? {
    return try {
        SerializableUtil.strToObj<E>(this)
    } catch (e: Exception) {
        null
    }
}
