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

marais.graphql.dsl.Lambdas.kt Maven / Gradle / Ivy

package marais.graphql.dsl

import kotlin.reflect.KFunction

/**
 * Set of functions that calls the lambda passed as argument.
 * We can call these functions through reflections since they are concrete ones.
 * They are all static in the sense of the JVM, so we do not need to pass a receiver.
 */
@PublishedApi
internal object Lambdas {

    @PublishedApi
    internal fun indirectCallSuspend(arity: Int): KFunction<*> {
        return when (arity) {
            0 -> Lambdas::indirectCallSuspend0
            1 -> Lambdas::indirectCallSuspend1
            2 -> Lambdas::indirectCallSuspend2
            3 -> Lambdas::indirectCallSuspend3
            4 -> Lambdas::indirectCallSuspend4
            5 -> Lambdas::indirectCallSuspend5
            6 -> Lambdas::indirectCallSuspend6
            else -> throw Exception("Unsupported arity $arity")
        }
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend0(rec: Any, fetcher: suspend Any.() -> Any?): Any? {
        return fetcher(rec)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend1(rec: Any, fetcher: suspend Any.(Any?) -> Any?, arg0: Any?): Any? {
        return fetcher(rec, arg0)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend2(
        rec: Any,
        fetcher: suspend Any.(Any?, Any?) -> Any?,
        arg0: Any?,
        arg1: Any?
    ): Any? {
        return fetcher(rec, arg0, arg1)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend3(
        rec: Any,
        fetcher: suspend Any.(Any?, Any?, Any?) -> Any?,
        arg0: Any?,
        arg1: Any?,
        arg2: Any?
    ): Any? {
        return fetcher(rec, arg0, arg1, arg2)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend4(
        rec: Any,
        fetcher: suspend Any.(Any?, Any?, Any?, Any?) -> Any?,
        arg0: Any?,
        arg1: Any?,
        arg2: Any?,
        arg3: Any?
    ): Any? {
        return fetcher(rec, arg0, arg1, arg2, arg3)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend5(
        rec: Any,
        fetcher: suspend Any.(Any?, Any?, Any?, Any?, Any?) -> Any?,
        arg0: Any?,
        arg1: Any?,
        arg2: Any?,
        arg3: Any?,
        arg4: Any?
    ): Any? {
        return fetcher(rec, arg0, arg1, arg2, arg3, arg4)
    }

    @JvmStatic
    internal suspend fun indirectCallSuspend6(
        rec: Any,
        fetcher: suspend Any.(Any?, Any?, Any?, Any?, Any?, Any?) -> Any?,
        arg0: Any?,
        arg1: Any?,
        arg2: Any?,
        arg3: Any?,
        arg4: Any?,
        arg5: Any?
    ): Any? {
        return fetcher(rec, arg0, arg1, arg2, arg3, arg4, arg5)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy