All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kweb.html.StorageReceiver.kt Maven / Gradle / Ivy

There is a newer version: 1.4.12
Show newest version
package kweb.html

import kotlinx.serialization.json.*
import kotlinx.serialization.serializer
import kweb.WebBrowser
import kweb.util.KWebDSL

/**
 * Created by ian on 1/14/17.
 */
@KWebDSL
class StorageReceiver(val receiver: WebBrowser, val type: StorageType) {
    private val obj = "${type.name}Storage"

    operator fun set(key: String, value: String) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Int) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Float) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Double) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Short) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Long) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Boolean) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: Char) {
        set(key, JsonPrimitive(value.toString()))
    }

    operator fun set(key: String, value: Byte) {
        set(key, JsonPrimitive(value))
    }

    operator fun set(key: String, value: JsonElement) {
        if (value == JsonNull || value.toString() == "") {
            throw IllegalArgumentException("$obj cannot store the value \"\"")
        }
        //language=JavaScript
        receiver.callJsFunction("$obj.setItem({}, {});", JsonPrimitive(key), value)
    }

    suspend inline fun  get(name: String): V? {
        val result = getString(name)
        val serializer = serializer()
        return when(result) {
            null -> null
            else -> Json.decodeFromString(serializer, result)
        }
    }

    suspend fun getString(key: String): String? {
        return when (val result = Json
            .decodeFromJsonElement(
                receiver.callJsFunctionWithResult("return $obj.getItem({});", JsonPrimitive(key)))) {
            "" -> null
            else -> result
        }
    }

    fun remove(key: String) {
        //language=JavaScript
        receiver.callJsFunction("$obj.removeItem({});", JsonPrimitive(key))
    }

}

enum class StorageType {
    local, session
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy