Transaction Script Generator
GenerateTransactionScriptAttribute creates a typed TransactionScript<TRequest,TResponse> factory from a static partial host.
[GenerateTransactionScript(typeof(SubmitOrderRequest), typeof(SubmitOrderReceipt), FactoryName = "CreateScript", ScriptName = "submit-order")]
public static partial class GeneratedSubmitOrderScript
{
[TransactionScriptValidator]
private static IEnumerable<TransactionScriptError> Validate(SubmitOrderRequest request)
=> request.Total <= 0m
? [new TransactionScriptError("total", "Order total must be positive.")]
: [];
[TransactionScriptHandler]
private static ValueTask<SubmitOrderReceipt> Handle(SubmitOrderRequest request, CancellationToken cancellationToken)
=> new(new SubmitOrderReceipt(request.OrderId, request.Total));
}
The generated factory is equivalent to:
TransactionScript<SubmitOrderRequest, SubmitOrderReceipt>
.Create("submit-order")
.Validate(Validate)
.Execute(Handle)
.Build();
Diagnostics:
PKTS001: host type must be partial.PKTS002: exactly one[TransactionScriptHandler]method is required.PKTS003: handler must be static and returnValueTask<TResponse>from(TRequest, CancellationToken).PKTS004: validator must be a single static method returningIEnumerable<TransactionScriptError>fromTRequest.