[Feature] Support the `Subject` property on SNS events
Is your feature request related to a problem? Please describe.
Messages published to SNS can have an optional Subject parameter specified, which is then populated at the top level. The intent behind the parameter is for populating the subject line when SNS messages are routed to an email endpoint. However, there are other libraries, such as JustSaying, which rely on this parameter as a routing mechanism when consuming messages from SNS.
We would like Brighter to have support for the Subject parameter when publishing to SNS so that users routing to email endpoints or using libraries which rely on the parameter can consume messages from SNS that have been published using Brighter.
Describe the solution you'd like
The SnsPublication class offers a point at which SNS specific configuration can be provided. This class could be extended with an extra optional parameter which takes a Func<Message,String> delegate that returns the subject for a given message.
This delegate can then ultimately be passed to the SqsMessagePublisher, and invoked (if not null) to get the subject of the message and pass it to the SNS PublishRequest.
Describe alternatives you've considered
Rather than taking a delegate that determines the subject for a message, the SnsPublication could simply take a subject string that applies to all messages for that publication. This would solve the issue for our use case, since each publication corresponds to one topic, and each topic always uses the same subject, but this may not be the case for all users. Users of email endpoints in particular could benefit from more dynamic subject generation depending on the content of the message.