Skip to content

Commit 034c37b

Browse files
committed
Add StringExample for easier examples of String properties
1 parent e36e8e7 commit 034c37b

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.papsign.ktor.openapigen.annotations.type.string.example
2+
3+
import com.papsign.ktor.openapigen.schema.processor.SchemaProcessorAnnotation
4+
5+
/**
6+
* Provide examples for a String property
7+
*/
8+
@Target(AnnotationTarget.PROPERTY)
9+
@SchemaProcessorAnnotation(StringExampleProcessor::class)
10+
annotation class StringExample(vararg val examples: String)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.papsign.ktor.openapigen.annotations.type.string.example
2+
3+
import com.papsign.ktor.openapigen.model.schema.SchemaModel
4+
import com.papsign.ktor.openapigen.schema.processor.SchemaProcessor
5+
import kotlin.reflect.KType
6+
7+
object StringExampleProcessor: SchemaProcessor<StringExample> {
8+
override fun process(model: SchemaModel<*>, type: KType, annotation: StringExample): SchemaModel<*> {
9+
(model as SchemaModel<String?>).apply {
10+
if (annotation.examples.size > 1) {
11+
examples = examples?.plus(annotation.examples) ?: annotation.examples.asList()
12+
} else {
13+
if (example == null) {
14+
example = annotation.examples.getOrNull(0)
15+
} else {
16+
examples = examples?.plus(annotation.examples)
17+
}
18+
}
19+
}
20+
return model
21+
}
22+
23+
}

src/test/kotlin/TestServer.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.papsign.ktor.openapigen.annotations.type.number.ConstraintVialoation
3131
import com.papsign.ktor.openapigen.annotations.type.number.integer.clamp.Clamp
3232
import com.papsign.ktor.openapigen.annotations.type.number.integer.max.Max
3333
import com.papsign.ktor.openapigen.annotations.type.number.integer.min.Min
34+
import com.papsign.ktor.openapigen.annotations.type.string.example.StringExample
3435
import io.ktor.application.application
3536
import io.ktor.application.call
3637
import io.ktor.application.install
@@ -227,7 +228,7 @@ object TestServer {
227228
data class NameParam(@HeaderParam("A simple Header Param") @OpenAPIName("X-NAME") val name: String)
228229

229230
@Response("A Response for header param example")
230-
data class NameGreetingResponse(val str: String)
231+
data class NameGreetingResponse(@StringExample("Hi, John!") val str: String)
231232

232233

233234
@Response("A String Response")

0 commit comments

Comments
 (0)