-
-
Notifications
You must be signed in to change notification settings - Fork 25
Description
Why do we need this improvement?
From the documentation https://www.asyncapi.com/docs/reference/specification/v3.0.0#channelBindingsObject - it appears that the Binding Object should be extendable.
When deserializing a specification the map contains a null Object in the getBindings map which, as someone wanting to produce a custom binding, makes life a bit more difficult.
How will this change help?
A user of the library will be able to access their binding extensions, and deserialize them to the appropriate type more simply.
Screenshots
channels:
fxConfig:
address: /PRIVATE/FX/CONFIG
bindings:
x-datasource:
map:
- value: "%u"
position: 2
description: Channel for FX user config
messages:
FXConfigMessage:
$ref: "#/components/messages/FXConfig"fun main() {
val objectMapper = ObjectMapper(YAMLFactory())
val api = objectMapper.readValue<AsyncAPI>(object {}::class.java.getResourceAsStream("/userconfig/asyncapi.yaml"))
api.channels?.forEach { (channelName, channel) ->
check(channel is Channel)
println(channel.bindings)
}
}outputs:
{x-datasource=null}
How could it be implemented/designed?
It would be nice if it provided a JsonNode, or a Map like Channel#getExtensionFields in the case where it encounters an extension? It looks like this might be a simple change to ChannelBindingsDeserializer (and likely the other binding deserializers).
default: return jsonParser.readValueAs(JsonNode.class);
I do not know if this is a breaking change or not as there may be code that depends on binding extensions being null in order to ignore them.
🚧 Breaking changes
Yes
👀 Have you checked for similar open issues?
- I checked and didn't find a similar issue
🏢 Have you read the Contributing Guidelines?
- I have read the Contributing Guidelines
Are you willing to work on this issue?
Yes I am willing to submit a PR!