kgraphql / com.apurebase.kgraphql.schema.model / FunctionWrapper

FunctionWrapper

interface FunctionWrapper<T> : Publisher

FunctionWrapper is common interface for classes storing functions registered in schema by server code. Only up to 9 arguments are supported, because kotlin-reflect doesn't support invoking lambdas, local and anonymous functions yet, making implementation severely limited.

Types

ArityEight

class ArityEight<T, R, E, W, Q, A, S, D, F> : Base<T>

ArityFive

class ArityFive<T, R, E, W, Q, A> : Base<T>

ArityFour

class ArityFour<T, R, E, W, Q> : Base<T>

ArityN

class ArityN<T> : Base<T>

ArityNine

class ArityNine<T, R, E, W, Q, A, S, D, F, G> : Base<T>

ArityOne

class ArityOne<T, R> : Base<T>

AritySeven

class AritySeven<T, R, E, W, Q, A, S, D> : Base<T>

AritySix

class AritySix<T, R, E, W, Q, A, S> : Base<T>

ArityThree

class ArityThree<T, R, E, W> : Base<T>

ArityTwo

class ArityTwo<T, R, E> : Base<T>

ArityZero

class ArityZero<T> : Base<T>

Base

abstract class Base<T> : FunctionWrapper<T>

Properties

argumentsDescriptor

abstract val argumentsDescriptor: Map<String, KType>

hasReceiver

denotes whether function is called with receiver argument. Receiver argument in GraphQL is somewhat similar to kotlin receivers: its value is passed by framework, usually it is parent of function property with FunctionWrapper Receiver argument is omitted in schema, and cannot be stated in query document.

abstract val hasReceiver: Boolean

kFunction

abstract val kFunction: KFunction<T>

Functions

arity

abstract fun arity(): Int

hasReturnType

open fun hasReturnType(): Boolean

invoke

abstract suspend fun invoke(vararg args: Any?): T?
abstract suspend fun invoke(args: List<Any?>, subscriptionArgs: List<String>, objectWriter: ObjectWriter): T?

valueParameters

returns list of function parameters without receiver

open fun valueParameters(): List<KParameter>

Companion Object Functions

on

fun <T> on(function: KFunction<T>): FunctionWrapper<T>
fun <T> on(function: suspend () -> T): FunctionWrapper<T>
fun <T, R> on(function: suspend (R) -> T): ArityOne<T, R>
fun <T, R> on(function: suspend (R) -> T, hasReceiver: Boolean = false): ArityOne<T, R>
fun <T, R, E> on(function: suspend (R, E) -> T, hasReceiver: Boolean = false): ArityTwo<T, R, E>
fun <T, R, E, W> on(function: suspend (R, E, W) -> T, hasReceiver: Boolean = false): ArityThree<T, R, E, W>
fun <T, R, E, W, Q> on(function: suspend (R, E, W, Q) -> T, hasReceiver: Boolean = false): ArityFour<T, R, E, W, Q>
fun <T, R, E, W, Q, A> on(function: suspend (R, E, W, Q, A) -> T, hasReceiver: Boolean = false): ArityFive<T, R, E, W, Q, A>
fun <T, R, E, W, Q, A, S> on(function: suspend (R, E, W, Q, A, S) -> T, hasReceiver: Boolean = false): AritySix<T, R, E, W, Q, A, S>
fun <T, R, E, W, Q, A, S, G> on(function: suspend (R, E, W, Q, A, S, G) -> T, hasReceiver: Boolean = false): AritySeven<T, R, E, W, Q, A, S, G>
fun <T, R, E, W, Q, A, S, G, H> on(function: suspend (R, E, W, Q, A, S, G, H) -> T, hasReceiver: Boolean = false): ArityEight<T, R, E, W, Q, A, S, G, H>
fun <T, R, E, W, Q, A, S, G, H, J> on(function: suspend (R, E, W, Q, A, S, G, H, J) -> T, hasReceiver: Boolean = false): ArityNine<T, R, E, W, Q, A, S, G, H, J>

Inheritors

BaseOperationDef

abstract class BaseOperationDef<T, R> : Definition, OperationDef<R>, FunctionWrapper<R>

DirectiveExecution

class DirectiveExecution : FunctionWrapper<DirectiveResult>

OperationDef

interface OperationDef<T> : FunctionWrapper<T>, Depreciable, DescribedDef

Transformation

data class Transformation<T : Any, R> : FunctionWrapper<R>