Created
September 15, 2017 08:14
-
-
Save pardahlman/e26c02643785e94f52ba60641c241fcb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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