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

internal.data._PluginData.value.kt Maven / Gradle / Ivy

There is a newer version: 2.16.0
Show newest version
/*
 * Copyright 2019-2020 Mamoe Technologies and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
 *
 * https://github.com/mamoe/mirai/blob/master/LICENSE
 */

package net.mamoe.mirai.console.internal.data

import kotlinx.serialization.builtins.serializer
import net.mamoe.mirai.console.data.PluginData
import net.mamoe.mirai.console.data.ReferenceValue
import net.mamoe.mirai.console.data.SerializerAwareValue
import kotlin.reflect.KClass


internal object BuiltInSerializerConstants {
    //// region BuiltInSerializerConstantsPrimitives CODEGEN ////

    @JvmStatic
    internal val ByteSerializerDescriptor = Byte.serializer().descriptor

    @JvmStatic
    internal val ShortSerializerDescriptor = Short.serializer().descriptor

    @JvmStatic
    internal val IntSerializerDescriptor = Int.serializer().descriptor

    @JvmStatic
    internal val LongSerializerDescriptor = Long.serializer().descriptor

    @JvmStatic
    internal val FloatSerializerDescriptor = Float.serializer().descriptor

    @JvmStatic
    internal val DoubleSerializerDescriptor = Double.serializer().descriptor

    @JvmStatic
    internal val CharSerializerDescriptor = Char.serializer().descriptor

    @JvmStatic
    internal val BooleanSerializerDescriptor = Boolean.serializer().descriptor

    @JvmStatic
    internal val StringSerializerDescriptor = String.serializer().descriptor

    //// endregion BuiltInSerializerConstantsPrimitives CODEGEN ////
}

@Suppress("UNCHECKED_CAST")
internal fun  PluginData.valueImplPrimitive(kClass: KClass): SerializerAwareValue? {
    return when (kClass) {
        //// region PluginData_valueImplPrimitive CODEGEN ////

        Byte::class -> byteValueImpl()
        Short::class -> shortValueImpl()
        Int::class -> intValueImpl()
        Long::class -> longValueImpl()
        Float::class -> floatValueImpl()
        Double::class -> doubleValueImpl()
        Char::class -> charValueImpl()
        Boolean::class -> booleanValueImpl()
        String::class -> stringValueImpl()

        //// endregion PluginData_valueImplPrimitive CODEGEN ////
        else -> error("Internal error: unexpected type passed: ${kClass.qualifiedName}")
    } as SerializerAwareValue?
}


//// region PluginData_value_PrimitivesImpl CODEGEN ////

internal fun PluginData.valueImpl(default: Byte): SerializerAwareValue {
    return object : ByteValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.byteValueImpl(): SerializerAwareValue {
    return object : ByteValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Short): SerializerAwareValue {
    return object : ShortValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.shortValueImpl(): SerializerAwareValue {
    return object : ShortValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Int): SerializerAwareValue {
    return object : IntValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.intValueImpl(): SerializerAwareValue {
    return object : IntValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Long): SerializerAwareValue {
    return object : LongValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.longValueImpl(): SerializerAwareValue {
    return object : LongValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Float): SerializerAwareValue {
    return object : FloatValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.floatValueImpl(): SerializerAwareValue {
    return object : FloatValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Double): SerializerAwareValue {
    return object : DoubleValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.doubleValueImpl(): SerializerAwareValue {
    return object : DoubleValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Char): SerializerAwareValue {
    return object : CharValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.charValueImpl(): SerializerAwareValue {
    return object : CharValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: Boolean): SerializerAwareValue {
    return object : BooleanValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.booleanValueImpl(): SerializerAwareValue {
    return object : BooleanValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.valueImpl(default: String): SerializerAwareValue {
    return object : StringValueImpl(default) {
        override fun onChanged() = [email protected](this)
    }
}

internal fun PluginData.stringValueImpl(): SerializerAwareValue {
    return object : StringValueImpl() {
        override fun onChanged() = [email protected](this)
    }
}

//// endregion PluginData_value_PrimitivesImpl CODEGEN ////

internal class LazyReferenceValueImpl : ReferenceValue, AbstractValueImpl() {
    private var initialied: Boolean = false
    private var valueField: T? = null

    @Suppress("UNCHECKED_CAST")
    override var value: T
        get() {
            check(initialied) { "Internal error: LazyReferenceValueImpl.valueField isn't initialized" }
            return valueField as T
        }
        set(value) {
            initialied = true
            valueField = value
        }

    override fun toString(): String {
        return valueField.toString()
    }

    override fun equals(other: Any?): Boolean {
        if (other === this) return true
        if (other?.javaClass != this.javaClass) return false

        other as LazyReferenceValueImpl<*>
        if (other.valueField != valueField) return false
        return true
    }

    override fun hashCode(): Int {
        return valueField?.hashCode() ?: 0
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy