Skip to content

Instantly share code, notes, and snippets.

@pardahlman
Created September 15, 2017 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pardahlman/e26c02643785e94f52ba60641c241fcb to your computer and use it in GitHub Desktop.
Save pardahlman/e26c02643785e94f52ba60641c241fcb to your computer and use it in GitHub Desktop.
using System.Threading;
using System.Threading.Tasks;
using RawRabbit.Pipe;
using RawRabbit.Pipe.Middleware;
using RawRabbit.Serialization;
namespace RawRabbit.Custom
{
public class CustomBodySerializationMiddleware : BodySerializationMiddleware
{
private readonly ISerializer _defaultSerializer;
public CustomBodySerializationMiddleware(ISerializer serializer, MessageSerializationOptions options = null)
: base(serializer, options)
{
_defaultSerializer = serializer;
}
public override Task InvokeAsync(IPipeContext context, CancellationToken token)
{
var message = GetMessage(context);
var serializer = GetCustomSerializerOrDefault(context);
var serialized = serializer.Serialize(message);
AddSerializedMessageToContext(context, serialized);
return base.InvokeAsync(context, token);
}
private ISerializer GetCustomSerializerOrDefault(IPipeContext context)
{
return context.GetSerializer() ?? _defaultSerializer;
}
}
public static class PipeContextSerializerExtensions
{
private const string SerializerKey = "Serializer:Custom";
public static ISerializer GetSerializer(this IPipeContext context)
{
return context.Get<ISerializer>(SerializerKey);
}
public static IPipeContext UseSerializer(this IPipeContext context, ISerializer serializer)
{
context.Properties.AddOrReplace(SerializerKey, serializer);
return context;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment