Skip to content

Commit 878d922

Browse files
authored
fix: make message traits referenceable (#86)
* Make message traits referencable * Fix context module
1 parent 3f5b3da commit 878d922

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

kotlin-asyncapi-context/src/main/kotlin/com/asyncapi/kotlinasyncapi/context/annotation/processor/MappingUtils.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.asyncapi.kotlinasyncapi.context.annotation.processor
22

3-
import com.fasterxml.jackson.core.type.TypeReference
4-
import com.fasterxml.jackson.databind.ObjectMapper
53
import com.asyncapi.kotlinasyncapi.annotation.CorrelationID
64
import com.asyncapi.kotlinasyncapi.annotation.ExternalDocumentation
75
import com.asyncapi.kotlinasyncapi.annotation.Schema
@@ -27,13 +25,15 @@ import com.asyncapi.kotlinasyncapi.model.ReferencableSchemasMap
2725
import com.asyncapi.kotlinasyncapi.model.Reference
2826
import com.asyncapi.kotlinasyncapi.model.TagsList
2927
import com.asyncapi.kotlinasyncapi.model.channel.MessageExamplesList
30-
import com.asyncapi.kotlinasyncapi.model.channel.MessageTraitsList
3128
import com.asyncapi.kotlinasyncapi.model.channel.OneOfReferencableMessages
3229
import com.asyncapi.kotlinasyncapi.model.channel.Operation
30+
import com.asyncapi.kotlinasyncapi.model.channel.ReferencableMessageTraitsList
3331
import com.asyncapi.kotlinasyncapi.model.channel.ReferencableMessagesList
3432
import com.asyncapi.kotlinasyncapi.model.channel.ReferencableOperationTraitsList
3533
import com.asyncapi.kotlinasyncapi.model.channel.ReferencableParametersMap
3634
import com.asyncapi.kotlinasyncapi.model.server.SecurityRequirementsList
35+
import com.fasterxml.jackson.core.type.TypeReference
36+
import com.fasterxml.jackson.databind.ObjectMapper
3737
import java.util.AbstractMap
3838

3939
internal fun Message.toMessage(): com.asyncapi.kotlinasyncapi.model.channel.Message =
@@ -140,8 +140,8 @@ internal fun Array<MessageExample>.toMessageExamplesList(): MessageExamplesList
140140
addAll(this@toMessageExamplesList.map { it.toMessageExample() })
141141
}
142142

143-
internal fun Array<MessageTrait>.toMessageTraitsList(): MessageTraitsList =
144-
MessageTraitsList().apply {
143+
internal fun Array<MessageTrait>.toMessageTraitsList(): ReferencableMessageTraitsList =
144+
ReferencableMessageTraitsList().apply {
145145
addAll(this@toMessageTraitsList.map { it.toMessageTrait() })
146146
}
147147

kotlin-asyncapi-core/src/main/kotlin/com/asyncapi/kotlinasyncapi/model/channel/Message.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class Message {
4949
var externalDocs: ExternalDocumentation? = null
5050
var bindings: Any? = null
5151
var examples: MessageExamplesList? = null
52-
var traits: MessageTraitsList? = null
52+
var traits: ReferencableMessageTraitsList? = null
5353

5454
fun messageId(value: String): String =
5555
value.also { messageId = it }
@@ -105,6 +105,6 @@ class Message {
105105
inline fun examples(build: MessageExamplesList.() -> Unit): MessageExamplesList =
106106
MessageExamplesList().apply(build).also { examples = it }
107107

108-
inline fun traits(build: MessageTraitsList.() -> Unit): MessageTraitsList =
109-
MessageTraitsList().apply(build).also { traits = it }
108+
inline fun traits(build: ReferencableMessageTraitsList.() -> Unit): ReferencableMessageTraitsList =
109+
ReferencableMessageTraitsList().apply(build).also { traits = it }
110110
}

kotlin-asyncapi-core/src/main/kotlin/com/asyncapi/kotlinasyncapi/model/channel/MessageTrait.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ import com.asyncapi.kotlinasyncapi.model.Schema
88
import com.asyncapi.kotlinasyncapi.model.TagsList
99

1010
@AsyncApiComponent
11-
class MessageTraitsList : ArrayList<MessageTrait>() {
11+
class ReferencableMessageTraitsList : ArrayList<Any>() {
1212
inline fun trait(build: MessageTrait.() -> Unit): MessageTrait =
1313
MessageTrait().apply(build).also { add(it) }
14+
15+
inline fun reference(build: Reference.() -> Unit): Reference =
16+
Reference().apply(build).also { add(it) }
1417
}
1518

1619
@AsyncApiComponent

kotlin-asyncapi-core/src/test/kotlin/com/asyncapi/kotlinasyncapi/model/AsyncApiIntegrationTest.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.asyncapi.kotlinasyncapi.model
22

3-
import org.junit.jupiter.api.Test
43
import com.asyncapi.kotlinasyncapi.model.AsyncApi.Companion.asyncApi
54
import com.asyncapi.kotlinasyncapi.model.TestUtils.assertJsonEquals
65
import com.asyncapi.kotlinasyncapi.model.TestUtils.json
6+
import org.junit.jupiter.api.Test
77

88
internal class AsyncApiIntegrationTest {
99

@@ -93,6 +93,11 @@ internal class AsyncApiIntegrationTest {
9393
bindingsRef {
9494
ref("#/components/messageBindings/streamingHeaders")
9595
}
96+
traits {
97+
reference {
98+
ref("#/components/messageTraits/cloudEventHeaders")
99+
}
100+
}
96101
}
97102
}
98103
messageBindings {
@@ -114,6 +119,11 @@ internal class AsyncApiIntegrationTest {
114119
}
115120
}
116121
}
122+
messageTraits {
123+
trait("cloudEventHeaders") {
124+
name("Cloud Events Header")
125+
}
126+
}
117127
}
118128
}
119129
val expected = json("async_api_integration.json")

kotlin-asyncapi-core/src/test/resources/async_api_integration.json

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,6 @@
44
"title" : "Gitter Streaming API",
55
"version" : "1.0.0"
66
},
7-
"id" : "urn:com:gitter:streaming:api",
8-
"servers" : {
9-
"production" : {
10-
"url" : "https://stream.gitter.im/v1",
11-
"protocol" : "https",
12-
"protocolVersion" : "1.1",
13-
"security" : [ {
14-
"httpBearerToken" : [ ]
15-
} ]
16-
}
17-
},
187
"channels" : {
198
"/rooms/{roomId}" : {
209
"subscribe" : {
@@ -42,6 +31,17 @@
4231
}
4332
}
4433
},
34+
"id" : "urn:com:gitter:streaming:api",
35+
"servers" : {
36+
"production" : {
37+
"url" : "https://stream.gitter.im/v1",
38+
"protocol" : "https",
39+
"protocolVersion" : "1.1",
40+
"security" : [ {
41+
"httpBearerToken" : [ ]
42+
} ]
43+
}
44+
},
4545
"components" : {
4646
"messages" : {
4747
"chatMessage" : {
@@ -73,7 +73,10 @@
7373
"summary" : "Its purpose is to keep the connection alive.",
7474
"bindings" : {
7575
"$ref" : "#/components/messageBindings/streamingHeaders"
76-
}
76+
},
77+
"traits" : [ {
78+
"$ref" : "#/components/messageTraits/cloudEventHeaders"
79+
} ]
7780
}
7881
},
7982
"securitySchemes" : {
@@ -82,6 +85,11 @@
8285
"scheme" : "bearer"
8386
}
8487
},
88+
"messageTraits" : {
89+
"cloudEventHeaders" : {
90+
"name" : "Cloud Events Header"
91+
}
92+
},
8593
"messageBindings" : {
8694
"streamingHeaders" : {
8795
"http" : {

0 commit comments

Comments
 (0)