Message Translator Generator
[GenerateMessageTranslator] creates a factory for MessageTranslator<TInput,TOutput>.
Use it when partner or transport event normalization is part of the application contract and should be validated by the compiler.
using PatternKit.Generators.Messaging;
using PatternKit.Messaging;
[GenerateMessageTranslator(typeof(PartnerOrderAccepted), typeof(CommerceOrderAccepted), FactoryName = "Build")]
[MessageTranslatorDropHeader("raw-signature")]
[MessageTranslatorHeader(MessageHeaderNames.ContentType, "application/vnd.myapp.order+json")]
public static partial class PartnerOrderTranslator
{
[MessageTranslatorHandler]
private static CommerceOrderAccepted Translate(Message<PartnerOrderAccepted> message, MessageContext context)
=> new($"commerce-{message.Payload.ExternalOrderId}", message.Payload.Amount, message.Payload.PartnerId);
}
Generated output:
var translator = PartnerOrderTranslator.Build();
var result = translator.Translate(partnerMessage);
Diagnostics
PKMT001: the translator host must be partial.PKMT002: exactly one[MessageTranslatorHandler]method is required.PKMT003: the handler must be static, return the output payload type, and acceptMessage<TInput>plusMessageContext.
Example
src/PatternKit.Examples/Messaging/PartnerEventTranslatorExample.cstest/PatternKit.Examples.Tests/Messaging/PartnerEventTranslatorExampleTests.cs