Kotlin
Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina
De Kotlin-bibliotheek is com.getlingara:lingara-kotlin op Maven Central. Ze draait op de JVM, vereist Java 17 en Kotlin 2.2 of hoger, en gebruikt kotlinx.coroutines en kotlinx.serialization.
Hoe het leest
- Elke aanroep is een
suspend-functie. Annuleer de coroutine om de aanroep te annuleren, of gebruikwithTimeoutvoor een deadline; je ziet je eigenCancellationException, nooit een ingepakte. - Een stream is een
EventStream, eenFlowdie je één keer collect. Collect hem binnenuse, zodat hij sluit als je klaar bent. Events zijn data classes onder een sealed interface, gematcht metwhen. - Fouten breiden de sealed class
LingaraExceptionuit, dus eenwhenerover is uitputtend.retryAfteris eenDuration, ofnullwanneer de API geen wachttijd noemde. - Maak een client aan met de builder
LingaraClient { }. Hij gebruikt deHttpClientvan de JDK, die je door je eigen kunt vervangen.
De voorbeelden hieronder voegen de afhankelijkheid toe, maken een client aan, streamen een woordenlijst en handelen een fout af.
Kotlin
implementation("com.getlingara:lingara-kotlin:0.1.0-alpha.6")Kotlin
import com.getlingara.kotlin.LingaraClient
val client =
LingaraClient {
clientCredentials(System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
}Kotlin
import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest
val request = VocabRequest(level = 2, sourceLang = "en", targetLang = "zh", count = 8)
// The request is sent here; collect the stream once, inside use {}.
client.generateVocabulary(request).use { stream ->
stream.collect { event ->
when (event) {
is GenerateVocabularyEvent.Item -> println("${event.data.word} ${event.data.translation}")
is GenerateVocabularyEvent.Started -> Unit
}
}
}Kotlin
try {
client.getUsage()
} catch (e: LingaraException) {
when (e) {
// A refusal from the API: status, code (stable) and message (localised).
is ApiException -> println("${e.status} ${e.code} ${e.message}; retry after ${e.retryAfter}")
// The token endpoint refused the credentials or the scopes.
is OAuthException -> println("${e.status} ${e.error} ${e.description}")
is MaintenanceException -> println("under maintenance; retry after ${e.retryAfter}")
// No usable answer: CONNECT, TLS, RESET, TIMEOUT, and so on.
is TransportException -> println("transport: ${e.kind}")
}
}
// A cancelled call throws the caller's own CancellationException instead.