/// <summary>
        ///		Create <see cref="RequestMessageSerializer"/> with specified tracer(s).
        /// </summary>
        /// <param name="serializingRequestTracer">Tracer for serializing request.</param>
        /// <param name="serializedRequestTracer">Tracer for serialized request binary stream.</param>
        /// <param name="deserializingRequestTracer">Tracer for deserializing request binary stream.</param>
        /// <param name="deserializedRequestTracer">Tracer for deserialized request.</param>
        /// <returns><see cref="RequestMessageSerializer"/> with specified tracer(s).</returns>
        public static RequestMessageSerializer CreateRequestMessageSerializerWithTracer(
			SerializingRequestTracingFilterProvider serializingRequestTracer,
			SerializedRequestTracingFilterProvider serializedRequestTracer,
			DeserializingRequestTracingFilterProvider deserializingRequestTracer,
			DeserializedRequestTracingFilterProvider deserializedRequestTracer
			)
        {
            return
                new RequestMessageSerializer(
                    serializingRequestTracer == null ? new IFilterProvider<RequestMessageSerializationFilter>[] { serializingRequestTracer } : null,
                    serializedRequestTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageSerializationContext>>[] { serializedRequestTracer } : null,
                    deserializingRequestTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageDeserializationContext>>[] { deserializingRequestTracer } : null,
                    deserializedRequestTracer == null ? new IFilterProvider<RequestMessageDeserializationFilter>[] { deserializedRequestTracer } : null,
                    null
                );
        }
 public void TestSerialize_Request()
 {
     // TODO: Mock filters
     var objectTracingFilter = new SerializingRequestTracingFilterProvider();
     var binaryTracingFilter = new SerializedRequestTracingFilterProvider();
     var target =
         SerializerFactory.CreateRequestMessageSerializerWithTracer(
             objectTracingFilter,
             binaryTracingFilter,
             null,
             null
         );
     try
     {
         var id = Environment.TickCount;
         var method = Guid.NewGuid().ToString();
         var args = new object[] { 1, "String", null, true };
         var buffer = new RpcOutputBuffer( ChunkBuffer.CreateDefault() );
         Assert.IsTrue( target.Serialize( id, method, args, buffer ).IsSuccess );
         byte[] serialized = buffer.ReadBytes().ToArray();
         var mpo =
             new MessagePackObject(
                 new MessagePackObject[]
                 {
                     new MessagePackObject( ( int )MessageType.Request ),
                     new MessagePackObject( ( uint )id ),
                     new MessagePackObject( method ),
                     new MessagePackObject[]
                     {
                         new MessagePackObject( 1 ),
                         new MessagePackObject( "String" ),
                         MessagePackObject.Nil,
                         new MessagePackObject( true )
                     }
                 }
             );
         var stream = new MemoryStream();
         Packer.Create( stream ).Pack( mpo );
         CollectionAssert.AreEqual( stream.ToArray(), serialized );
     }
     finally
     {
         Console.WriteLine( "OBJECT TRACE:{0}", objectTracingFilter.GetTrace() );
         Console.WriteLine( "BINARY TRACE:{0}", binaryTracingFilter.GetTrace() );
     }
 }