public IInvocationMessage DeserializeInvocationMessage(IPooledBuffer message)
        {
            using (var envelope = InvocationMessageEnvelope.Rent())
            {
                envelope.MergeFrom(message);
                switch (envelope.PayloadCase)
                {
                case InvocationMessageEnvelope.PayloadOneofCase.Message:
                    return(_messageFactory.CreateInvocationMessageHeader());

                case InvocationMessageEnvelope.PayloadOneofCase.Confirmation:
                    return(_messageFactory.CreateInvocationMessageReceived());

                case InvocationMessageEnvelope.PayloadOneofCase.SendCompletion:
                    return(_messageFactory.CreateInvocationSendCompletion());

                default:
                    throw new InvalidOperationException($"Unexpected payload case: {envelope.PayloadCase}");
                }
            }
        }