import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.client.call.*
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.Serializable
@Serializable data class NewUser(val name: String, val email: String)
@Serializable data class CreatedUser(val id: Int, val name: String, val email: String)
val client = HttpClient(CIO) {
install(ContentNegotiation) { json() } // auto JSON (de)serialization
expectSuccess = true
}
suspend fun createUser(req: NewUser): CreatedUser =
client.post("https://api.example.com/users") {
contentType(ContentType.Application.Json)
setBody(req)
}.body() // <-- typed deserialize via body<T>()
fun main() = runBlocking {
val user = createUser(NewUser("Alice", "a@x.com"))
println(user)
}
Create a free account and build your private vault. Share publicly whenever you want.