doc: add custom type example to playground (#189)

This commit is contained in:
Ryan Brink
2022-02-10 07:44:52 -05:00
committed by GitHub
parent 9bd34c4f97
commit 452ab4773f
3 changed files with 76 additions and 0 deletions

View File

@ -3,6 +3,7 @@
## Unreleased ## Unreleased
### Added ### Added
- Custom Type example to playground
### Changed ### Changed
- Cleaned up and broke out handlers into separate classes - Cleaned up and broke out handlers into separate classes

View File

@ -37,6 +37,7 @@ dependencies {
implementation(group = "org.jetbrains.kotlinx", "kotlinx-serialization-json", version = "1.3.2") implementation(group = "org.jetbrains.kotlinx", "kotlinx-serialization-json", version = "1.3.2")
implementation(group = "org.jetbrains.kotlinx", "kotlinx-datetime", version = "0.3.2")
implementation(group = "joda-time", name = "joda-time", version = "2.10.13") implementation(group = "joda-time", name = "joda-time", version = "2.10.13")
} }

View File

@ -0,0 +1,74 @@
package io.bkbn.kompendium.playground
import io.bkbn.kompendium.core.Kompendium
import io.bkbn.kompendium.core.Notarized.notarizedGet
import io.bkbn.kompendium.core.metadata.ResponseInfo
import io.bkbn.kompendium.core.metadata.method.GetInfo
import io.bkbn.kompendium.core.routes.redoc
import io.bkbn.kompendium.oas.schema.SimpleSchema
import io.bkbn.kompendium.oas.serialization.KompendiumSerializersModule
import io.bkbn.kompendium.playground.CustomTypePlaygroundToC.simpleGetExample
import io.bkbn.kompendium.playground.util.Util
import io.ktor.application.Application
import io.ktor.application.call
import io.ktor.application.install
import io.ktor.features.ContentNegotiation
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.routing.routing
import io.ktor.serialization.json
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
fun main() {
embeddedServer(
Netty,
port = 8081,
module = Application::mainModule
).start(wait = true)
}
private fun Application.mainModule() {
install(ContentNegotiation) {
json(Json {
serializersModule = KompendiumSerializersModule.module
encodeDefaults = true
explicitNulls = false
})
}
install(Kompendium) {
spec = Util.baseSpec
// Tells Kompendium how to handle a specific type
addCustomTypeSchema(Instant::class, SimpleSchema("string"))
}
routing {
redoc(pageTitle = "Custom overridden type Docs")
notarizedGet(simpleGetExample) {
call.respond(HttpStatusCode.OK, CustomTypeModels.AwesomeThingHappened("this http call!", Clock.System.now()))
}
}
}
private object CustomTypePlaygroundToC {
val simpleGetExample = GetInfo<Unit, CustomTypeModels.AwesomeThingHappened>(
summary = "Simple, Documented GET Request",
description = "This is to showcase just how easy it is to document your Ktor API!",
responseInfo = ResponseInfo(
status = HttpStatusCode.OK,
description = "This means everything went as expected!",
),
tags = setOf("Simple")
)
}
private object CustomTypeModels {
@Serializable
data class AwesomeThingHappened(
val thing: String,
val timestamp: Instant
)
}