![]() |
VOOZH | about |
This package has been renamed to MinimalLambda.Envelopes.Sns. Please migrate to the new package: MinimalLambda.Envelopes.Sns
dotnet add package AwsLambda.Host.Envelopes.Sns --version 1.3.1
NuGet\Install-Package AwsLambda.Host.Envelopes.Sns -Version 1.3.1
<PackageReference Include="AwsLambda.Host.Envelopes.Sns" Version="1.3.1" />
<PackageVersion Include="AwsLambda.Host.Envelopes.Sns" Version="1.3.1" />Directory.Packages.props
<PackageReference Include="AwsLambda.Host.Envelopes.Sns" />Project file
paket add AwsLambda.Host.Envelopes.Sns --version 1.3.1
#r "nuget: AwsLambda.Host.Envelopes.Sns, 1.3.1"
#:package AwsLambda.Host.Envelopes.Sns@1.3.1
#addin nuget:?package=AwsLambda.Host.Envelopes.Sns&version=1.3.1Install as a Cake Addin
#tool nuget:?package=AwsLambda.Host.Envelopes.Sns&version=1.3.1Install as a Cake Tool
Strongly-typed SNS event handling for the AwsLambda.Host framework.
This package provides SnsEnvelope<T>, which extends the base
SNSEvent
class with strongly-typed Records collection that deserializes message bodies into strongly-typed
objects. Instead of manually parsing JSON from record.Sns.Message, you access deserialized
payloads directly via record.Sns.MessageContent.
| Envelope Class | Base Class | Use Case |
|---|---|---|
SnsEnvelope<T> |
SNSEvent |
SNS event with deserialized message bodies |
Define your message type and handler:
using Amazon.Lambda.SNSEvents;
using AwsLambda.Host.Builder;
using AwsLambda.Host.Envelopes.Sns;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var builder = LambdaApplication.CreateBuilder();
var lambda = builder.Build();
// SnsEnvelope<Message> provides access to the SNS event and deserialized Message payloads
lambda.MapHandler(
([Event] SnsEnvelope<Message> envelope, ILogger<Program> logger) =>
{
foreach (var record in envelope.Records)
{
logger.LogInformation("Message: {Content}", record.Sns.MessageContent?.Content);
}
}
);
await lambda.RunAsync();
// Your message payload - will be deserialized from SNS message body
internal record Message(string Content);
To implement custom deserialization logic, extend SnsEnvelopeBase<T> and override the
ExtractPayload method:
// Example: Custom XML deserialization
public sealed class SnsXmlEnvelope<T> : SnsEnvelopeBase<T>
{
private static readonly XmlSerializer Serializer = new(typeof(T));
public override void ExtractPayload(EnvelopeOptions options)
{
foreach (var record in Records)
{
using var stringReader = new StringReader(record.Sns.Message);
using var xmlReader = XmlReader.Create(stringReader, options.XmlReaderSettings);
record.Sns.MessageContent = (T)Serializer.Deserialize(xmlReader)!;
}
}
}
This pattern allows you to support multiple serialization formats while maintaining the same envelope interface.
When using .NET Native AOT, register both the envelope and payload types in your
JsonSerializerContext:
[JsonSerializable(typeof(SnsEnvelope<Message>))]
[JsonSerializable(typeof(Message))]
internal partial class SerializerContext : JsonSerializerContext;
Register the serializer and configure envelope options to use the context:
builder.Services.AddLambdaSerializerWithContext<SerializerContext>();
builder.Services.ConfigureEnvelopeOptions(options =>
{
options.JsonOptions.TypeInfoResolver = SerializerContext.Default;
});
The context must be registered as the type resolver for both the envelope options and the Lambda serializer because the Lambda event and envelope payload are deserialized at different steps: the Lambda serializer deserializes the raw event, and the envelope options deserialize the envelope content into your payload type.
Additional packages in the aws-lambda-host framework for abstractions, observability, and event source handling.
This project is licensed under the MIT License. See for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|