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

ch.viseon.openOrca.client.JsonCodecJs.kt Maven / Gradle / Ivy

/*
 * Copyright 2017 viseon gmbh
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ch.viseon.openOrca.client

import ch.viseon.openOrca.share.JsonObj
import kotlin.js.Json

class JsonFactoryJs: ch.viseon.openOrca.share.JsonFactory {

  override fun newJson(block: ch.viseon.openOrca.share.JsonObj.() -> Unit): ch.viseon.openOrca.share.JsonObj {
    return ch.viseon.openOrca.client.JsonObjJs(block)
  }

  override fun parse(content: String): ch.viseon.openOrca.share.JsonArray {
    return ch.viseon.openOrca.share.JsonArray(JSON.parse>(content).map(::JsonObjJs))
  }
}

class JsonObjJs(val json: kotlin.js.Json = kotlin.js.json()) : ch.viseon.openOrca.share.JsonObj {


  override fun integer(key: String): Int {
    return json[key].toString().toInt()
  }


  override fun long(key: String): Long {
    return json[key].toString().toLong()
  }

  override fun float(key: String): Float {
    return json[key].toString().toFloat()
  }

  override fun double(key: String): Double {
    return json[key].toString().toDouble()
  }

  constructor(block: ch.viseon.openOrca.share.JsonObj.() -> Unit) : this() {
    block()
  }

  override fun boolean(key: String): Boolean {
    return json[key] == "true"
  }

  @Suppress("UNCHECKED_CAST")
  override fun  pArray(key: String): ch.viseon.openOrca.share.JsonArray {
    val array = (json[key] as Array)
    return ch.viseon.openOrca.share.JsonArray(array.asIterable())
  }

  @Suppress("UNCHECKED_CAST")
  override fun oArray(key: String): ch.viseon.openOrca.share.JsonArray {
    val values: MutableList = (json[key] as Array).map { ch.viseon.openOrca.client.JsonObjJs(it) }.toMutableList()
    return ch.viseon.openOrca.share.JsonArray(values)
  }

  override fun string(key: String): String {
    return json[key] as String
  }

  override fun optionalString(key: String): String? {
    return json[key] as String?
  }

  override fun optionalBoolean(key: String): Boolean? {
    return json[key] as Boolean?
  }

  override fun getObject(key: String): ch.viseon.openOrca.share.JsonObj {
    @Suppress("UNCHECKED_CAST_TO_NATIVE_INTERFACE")
    return ch.viseon.openOrca.client.JsonObjJs(json[key] as Json)
  }

  override fun set(key: String, value: String) {
    json[key] = value
  }

  override fun set(key: String, value: Boolean) {
    json[key] = value
  }

  override operator fun set(key: String, value: ch.viseon.openOrca.share.JsonObj) {
    json[key] = (value as ch.viseon.openOrca.client.JsonObjJs).json
  }

  override fun set(key: String, value: ch.viseon.openOrca.share.JsonArray) {
    json[key] = value.map { (it as ch.viseon.openOrca.client.JsonObjJs).json }
  }

  override fun set(key: String, value: Iterable) {
    json[key] = value
  }

  override fun set(key: String, block: ch.viseon.openOrca.share.JsonObj.() -> Unit) {
    val subJsonObj = ch.viseon.openOrca.client.JsonObjJs()
    subJsonObj.block()
    json[key] = subJsonObj.json
  }

  override fun toJsonString(): String {
    return JSON.stringify(json)
  }


}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy