/// <summary>
        /// Set the BaseStreamMetadataBody properties
        /// </summary>
        /// <param name="metadataKind">Kind of StreamMetadata</param>
        /// <param name="streamName">Name of the stream </param>
        /// <param name="partnerId">Partner Id</param>
        /// <param name="currentState">Current persistent state of the stream</param>
        /// <param name="closeMessageSequenceNumber">Closing sequence number of the message</param>
        protected void InitializeBaseParameters(
            StreamMetadataKind metadataKind, Uri streamName, PartitionKey partnerId, PersistentStreamState currentState, long closeMessageSequenceNumber)
        {
            this.MetadataKind = metadataKind;
            this.StreamName   = streamName;
            this.PartnerId    = partnerId;
            this.CurrentState = currentState;
            this.CloseMessageSequenceNumber = closeMessageSequenceNumber;
            var encoder = new StringEncoder(this.StreamName.OriginalString);

            this.BaseEncodeLength = (sizeof(int) * 2) + (sizeof(long) * 2) + encoder.EncodingByteCount + this.PartnerId.EncodingByteCount;
        }
 /// <summary>
 /// Constructs a Stream Meta data key object
 /// </summary>
 /// <param name="streamId">Unique StreamId</param>
 /// <param name="metadataKind">Kind of Stream MetaData</param>
 internal StreamMetadataKey(Guid streamId, StreamMetadataKind metadataKind)
 {
     this.StreamId     = streamId;
     this.MetadataKind = metadataKind;
 }