Improve documentation with Http codes (#261)

* Improve documentation dsl with Http codes

* Fix plaintext requiring T
This commit is contained in:
Mitchell Syer
2021-12-01 14:47:41 -05:00
committed by GitHub
parent efff68c49b
commit 205101568e
2 changed files with 18 additions and 7 deletions

View File

@@ -8,6 +8,7 @@ package suwayomi.tachidesk.manga.controller
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
import io.javalin.http.Context import io.javalin.http.Context
import io.javalin.http.HttpCode
import suwayomi.tachidesk.manga.impl.CategoryManga import suwayomi.tachidesk.manga.impl.CategoryManga
import suwayomi.tachidesk.manga.impl.Chapter import suwayomi.tachidesk.manga.impl.Chapter
import suwayomi.tachidesk.manga.impl.Library import suwayomi.tachidesk.manga.impl.Library
@@ -40,7 +41,8 @@ object MangaController {
) )
}, },
withResults = { withResults = {
json<MangaDataClass>("OK") json<MangaDataClass>(HttpCode.OK)
httpCode(HttpCode.NOT_FOUND)
} }
) )

View File

@@ -1,6 +1,7 @@
package suwayomi.tachidesk.server.util package suwayomi.tachidesk.server.util
import io.javalin.http.Context import io.javalin.http.Context
import io.javalin.http.HttpCode
import io.javalin.plugin.openapi.dsl.DocumentedHandler import io.javalin.plugin.openapi.dsl.DocumentedHandler
import io.javalin.plugin.openapi.dsl.OpenApiDocumentation import io.javalin.plugin.openapi.dsl.OpenApiDocumentation
import io.javalin.plugin.openapi.dsl.documented import io.javalin.plugin.openapi.dsl.documented
@@ -114,19 +115,27 @@ sealed class Param<T> {
class ResultsBuilder { class ResultsBuilder {
val results = mutableListOf<ResultType<*>>() val results = mutableListOf<ResultType<*>>()
inline fun <reified T> json(status: String) { inline fun <reified T> json(code: HttpCode) {
results += ResultType.MimeType(status, "application/json", T::class.java) results += ResultType.MimeType(code, "application/json", T::class.java)
} }
inline fun <reified T> plainText(status: String) { fun plainText(code: HttpCode) {
results += ResultType.MimeType(status, "text/plain", String::class.java) results += ResultType.MimeType(code, "text/plain", String::class.java)
}
fun httpCode(code: HttpCode) {
results += ResultType.StatusCode(code)
} }
} }
sealed class ResultType <T> { sealed class ResultType <T> {
abstract fun applyTo(documentation: OpenApiDocumentation) abstract fun applyTo(documentation: OpenApiDocumentation)
data class MimeType<T>(val status: String, val mime: String, private val clazz: Class<T>) : ResultType<T>() { data class MimeType<T>(val code: HttpCode, val mime: String, private val clazz: Class<T>) : ResultType<T>() {
override fun applyTo(documentation: OpenApiDocumentation) { override fun applyTo(documentation: OpenApiDocumentation) {
documentation.result(status, clazz) documentation.result(code.status.toString(), clazz)
}
}
data class StatusCode(val code: HttpCode) : ResultType<Unit>() {
override fun applyTo(documentation: OpenApiDocumentation) {
documentation.result<Unit>(code.status.toString())
} }
} }
} }