using Google.Protobuf; namespace BuildingBlocks.Core.Event; public class MessageEnvelope { public MessageEnvelope(object? message, IDictionary? headers = null) { Message = message; Headers = headers ?? new Dictionary(); } public object? Message { get; init; } public IDictionary Headers { get; init; } } public class MessageEnvelope : MessageEnvelope where TMessage : class, IMessage { public MessageEnvelope(TMessage message, IDictionary header) : base(message, header) { Message = message; } public new TMessage? Message { get; } }