@@ -7,7 +7,7 @@ import io.swagger.v3.oas.models.examples.Example
77/* *
88 * Implementation of an [ExampleContext].
99 */
10- class ExampleContextImpl : ExampleContext {
10+ class ExampleContextImpl ( private val encoder : ExampleEncoder ? ) : ExampleContext {
1111
1212 private val rootExamples = mutableMapOf<ExampleDescriptor , Example >()
1313 private val componentExamples = mutableMapOf<String , Example >()
@@ -18,11 +18,11 @@ class ExampleContextImpl : ExampleContext {
1818 */
1919 fun addShared (config : ExampleConfigData ) {
2020 config.sharedExamples.forEach { (_, exampleDescriptor) ->
21- val example = generateExample(exampleDescriptor)
21+ val example = generateExample(exampleDescriptor, null )
2222 componentExamples[exampleDescriptor.name] = example
2323 }
2424 config.securityExamples.forEach { exampleDescriptor ->
25- val example = generateExample(exampleDescriptor)
25+ val example = generateExample(exampleDescriptor, null )
2626 rootExamples[exampleDescriptor] = example
2727 }
2828 }
@@ -32,55 +32,59 @@ class ExampleContextImpl : ExampleContext {
3232 * Collect and add all examples for the given routes
3333 */
3434 fun add (routes : Collection <RouteMeta >) {
35- collectExampleDescriptors(routes).forEach { exampleDescriptor ->
36- rootExamples[exampleDescriptor] = generateExample(exampleDescriptor)
35+ collectExampleDescriptors(routes).forEach { (exampleDescriptor, typeDescriptor) ->
36+ val example = generateExample(exampleDescriptor, typeDescriptor)
37+ rootExamples[exampleDescriptor] = example
3738 }
3839 }
3940
4041
4142 /* *
4243 * Collect all [ExampleDescriptor]s from the given routes
4344 */
44- private fun collectExampleDescriptors (routes : Collection <RouteMeta >): List <ExampleDescriptor > {
45- val descriptors = mutableListOf<ExampleDescriptor >()
46- routes
47- .filter { ! it.documentation.hidden }
48- .forEach { route ->
49- route.documentation.request.also { request ->
50- request.parameters.forEach { parameter ->
51- parameter.example?.also { descriptors.add(it) }
52- }
53- request.body?.also { body ->
54- if (body is OpenApiSimpleBodyData ) {
55- descriptors.addAll(body.examples)
45+ private fun collectExampleDescriptors (routes : Collection <RouteMeta >): List <Pair <ExampleDescriptor , TypeDescriptor >> =
46+ buildList {
47+ routes
48+ .filter { ! it.documentation.hidden }
49+ .forEach { route ->
50+ route.documentation.request.also { request ->
51+ request.parameters.forEach { parameter ->
52+ parameter.example?.also { add(it to parameter.type) }
53+ }
54+ request.body?.also { body ->
55+ if (body is OpenApiSimpleBodyData ) {
56+ addAll(body.examples.map { it to body.type })
57+ }
5658 }
5759 }
58- }
59- route.documentation.responses.forEach { response ->
60- response.body?. also { body ->
61- if (body is OpenApiSimpleBodyData ) {
62- descriptors.addAll(body.examples)
60+ route.documentation.responses.forEach { response ->
61+ response.body?. also { body ->
62+ if ( body is OpenApiSimpleBodyData ) {
63+ addAll (body.examples.map { it to body.type })
64+ }
6365 }
6466 }
6567 }
66- }
67- return descriptors
68- }
68+ }
6969
7070
7171 /* *
7272 * Generate a swagger [Example] from the given [ExampleDescriptor]
7373 */
74- private fun generateExample (exampleDescriptor : ExampleDescriptor ): Example {
74+ private fun generateExample (exampleDescriptor : ExampleDescriptor , type : TypeDescriptor ? ): Example {
7575 return when (exampleDescriptor) {
7676 is ValueExampleDescriptor -> Example ().also {
77- it.value = exampleDescriptor.value
77+ it.value =
78+ if (encoder != null ) encoder.invoke(type, exampleDescriptor.value)
79+ else exampleDescriptor.value
7880 it.summary = exampleDescriptor.summary
7981 it.description = exampleDescriptor.description
8082 }
83+
8184 is RefExampleDescriptor -> Example ().also {
8285 it.`$ref` = " #/components/examples/${exampleDescriptor.refName} "
8386 }
87+
8488 is SwaggerExampleDescriptor -> exampleDescriptor.example
8589 }
8690 }
0 commit comments