diff --git a/springwolf-examples/springwolf-sqs-example/src/test/resources/asyncapi.json b/springwolf-examples/springwolf-sqs-example/src/test/resources/asyncapi.json index cc0efa2be..07ad8bd2f 100644 --- a/springwolf-examples/springwolf-sqs-example/src/test/resources/asyncapi.json +++ b/springwolf-examples/springwolf-sqs-example/src/test/resources/asyncapi.json @@ -39,7 +39,11 @@ "headers": { "$ref": "#/components/schemas/HeadersNotDocumented" }, - "bindings": { } + "bindings": { + "sqs": { + "bindingVersion": "0.2.0" + } + } } }, "publish": { diff --git a/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/operationdata/SqsMessageBindingProcessor.java b/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/operationdata/SqsMessageBindingProcessor.java new file mode 100644 index 000000000..cb992682e --- /dev/null +++ b/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/operationdata/SqsMessageBindingProcessor.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: Apache-2.0 +package io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata; + +import com.asyncapi.v2.binding.message.amqp.AMQPMessageBinding; +import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.MessageBindingProcessor; +import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.SqsAsyncOperationBinding; +import org.springframework.context.EmbeddedValueResolverAware; +import org.springframework.stereotype.Component; +import org.springframework.util.StringValueResolver; + +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Optional; + +@Component +public class SqsMessageBindingProcessor implements MessageBindingProcessor, EmbeddedValueResolverAware { + private StringValueResolver resolver; + + @Override + public void setEmbeddedValueResolver(StringValueResolver resolver) { + this.resolver = resolver; + } + + @Override + public Optional process(Method method) { + return Arrays.stream(method.getAnnotations()) + .filter(annotation -> annotation instanceof SqsAsyncOperationBinding) + .map(annotation -> (SqsAsyncOperationBinding) annotation) + .findAny() + .map(this::mapToMessageBinding); + } + + private ProcessedMessageBinding mapToMessageBinding(SqsAsyncOperationBinding bindingAnnotation) { + AMQPMessageBinding amqpMessageBinding = AMQPMessageBinding.builder().build(); + + return new ProcessedMessageBinding(bindingAnnotation.type(), amqpMessageBinding); + } +}