/// <summary>
 /// Creates a new instance of ODataRequestMessage. This constructor is used for top level requests.
 /// </summary>
 /// <param name="requestMessage">RequestMessage that needs to be wrapped.</param>
 /// <param name="requestInfo">Request Info.</param>
 /// <param name="descriptor">Descriptor for this request.</param>
 protected ODataRequestMessageWrapper(DataServiceClientRequestMessage requestMessage, RequestInfo requestInfo, Descriptor descriptor)
 {
     Debug.Assert(requestMessage != null, "requestMessage != null");
     Debug.Assert(requestInfo != null, "requestInfo != null");
     this.requestMessage = requestMessage;
     this.requestInfo = requestInfo;
     this.Descriptor = descriptor;
 }
 /// <summary>
 /// Creates a new instance of InnerBatchRequestMessageWrapper;
 /// </summary>
 /// <param name="clientRequestMessage">Instance of DataServiceClientRequestMessage that represents this request.</param>
 /// <param name="odataRequestMessage">Instance of IODataRequestMessage created by ODataLib.</param>
 /// <param name="requestInfo">RequestInfo instance.</param>
 /// <param name="descriptor">Descriptor for this request.</param>
 internal InnerBatchRequestMessageWrapper(DataServiceClientRequestMessage clientRequestMessage, IODataRequestMessage odataRequestMessage, RequestInfo requestInfo, Descriptor descriptor)
     : base(clientRequestMessage, requestInfo, descriptor)
 {
     this.innerBatchRequestMessage = odataRequestMessage;
 }
 /// <summary>
 /// Creates a new instance of ODataOuterRequestMessage.
 /// </summary>
 /// <param name="requestMessage">DataServiceClientRequestMessage instance.</param>
 /// <param name="requestInfo">RequestInfo instance.</param>
 /// <param name="descriptor">Descriptor for this request.</param>
 internal TopLevelRequestMessageWrapper(DataServiceClientRequestMessage requestMessage, RequestInfo requestInfo, Descriptor descriptor)
     : base(requestMessage, requestInfo, descriptor)
 {
     // Wrapper for the top-level request messages which caches the request stream as it is written. In order to keep the sync and non-async 
     // code the same, we write all requests into an cached stream and then copy it to the underlying network stream in sync or async manner.
     this.messageWithCachedStream = new RequestMessageWithCachedStream(this.requestMessage);
 }
 /// <summary>
 /// Creates a new instance of InternalODataRequestMessage.
 /// </summary>
 /// <param name="requestMessage">IODataRequestMessage that needs to be wrapped.</param>
 internal RequestMessageWithCachedStream(DataServiceClientRequestMessage requestMessage)
 {
     Debug.Assert(requestMessage != null, "requestMessage != null");
     this.requestMessage = requestMessage;
 }
 /// <summary>
 /// Creates a new instance of InnerBatchRequestMessageWrapper;
 /// </summary>
 /// <param name="clientRequestMessage">Instance of DataServiceClientRequestMessage that represents this request.</param>
 /// <param name="odataRequestMessage">Instance of IODataRequestMessage created by ODataLib.</param>
 /// <param name="requestInfo">RequestInfo instance.</param>
 /// <param name="descriptor">Descriptor for this request.</param>
 internal InnerBatchRequestMessageWrapper(DataServiceClientRequestMessage clientRequestMessage, IODataRequestMessage odataRequestMessage, RequestInfo requestInfo, Descriptor descriptor)
     : base(clientRequestMessage, requestInfo, descriptor)
 {
     this.innerBatchRequestMessage = odataRequestMessage;
 }
 /// <summary>
 /// Creates a new instance of InternalODataRequestMessage.
 /// </summary>
 /// <param name="requestMessage">IODataRequestMessage that needs to be wrapped.</param>
 internal RequestMessageWithCachedStream(DataServiceClientRequestMessage requestMessage)
 {
     Debug.Assert(requestMessage != null, "requestMessage != null");
     this.requestMessage = requestMessage;
 }