Skip to content

Commit 10f49e3

Browse files
authored
Merge pull request #54 from bherbst/property_examples
Add StringExample for easier examples of String properties
2 parents 6318961 + 034c37b commit 10f49e3

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
@@ -32,6 +32,7 @@ import com.papsign.ktor.openapigen.annotations.type.number.ConstraintVialoation
3232
import com.papsign.ktor.openapigen.annotations.type.number.integer.clamp.Clamp
3333
import com.papsign.ktor.openapigen.annotations.type.number.integer.max.Max
3434
import com.papsign.ktor.openapigen.annotations.type.number.integer.min.Min
35+
import com.papsign.ktor.openapigen.annotations.type.string.example.StringExample
3536
import io.ktor.application.application
3637
import io.ktor.application.call
3738
import io.ktor.application.install
@@ -228,7 +229,7 @@ object TestServer {
228229
data class NameParam(@HeaderParam("A simple Header Param") @OpenAPIName("X-NAME") val name: String)
229230

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

233234

234235
@Response("A String Response")

0 commit comments

Comments
 (0)