/* * Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license. */ package dev.gitlive.firebase.functions import dev.gitlive.firebase.Firebase import dev.gitlive.firebase.FirebaseApp import dev.gitlive.firebase.FirebaseException import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.ImplicitReflectionSerializer import kotlinx.serialization.SerializationStrategy expect class FirebaseFunctions { fun httpsCallable(name: String, timeout: Long? = null): HttpsCallableReference fun useFunctionsEmulator(origin: String) } expect class HttpsCallableReference { @ImplicitReflectionSerializer suspend operator fun invoke(data: Any, encodeDefaults: Boolean = true): HttpsCallableResult suspend operator fun <T> invoke(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true): HttpsCallableResult suspend operator fun invoke(): HttpsCallableResult } expect class HttpsCallableResult { @ImplicitReflectionSerializer inline fun <reified T> data(): T fun <T> data(strategy: DeserializationStrategy<T>): T } /** Returns the [FirebaseFunctions] instance of the default [FirebaseApp]. */ expect val Firebase.functions: FirebaseFunctions /** Returns the [FirebaseFunctions] instance of a given [region]. */ expect fun Firebase.functions(region: String): FirebaseFunctions /** Returns the [FirebaseFunctions] instance of a given [FirebaseApp]. */ expect fun Firebase.functions(app: FirebaseApp): FirebaseFunctions /** Returns the [FirebaseFunctions] instance of a given [FirebaseApp] and [region]. */ expect fun Firebase.functions(app: FirebaseApp, region: String): FirebaseFunctions expect class FirebaseFunctionsException: FirebaseException