public void HandleResponse(GetResponse response)
        {
            if (response.ForceRetry)
            {
                Result        = null;
                RequiresRetry = true;
                return;
            }

            switch (response.StatusCode)
            {
            case HttpStatusCode.NotModified:
                Result = (default(T), _changeVector);     // value not changed
                return;

            case HttpStatusCode.NotFound:
                _session.RegisterMissing(_id);
                Result = default((T, string));
                return;
            }

            if (response.Result != null)
            {
                var etag         = response.Headers[Constants.Headers.Etag];
                var res          = JsonDeserializationClient.ConditionalGetResult((BlittableJsonReaderObject)response.Result);
                var documentInfo = DocumentInfo.GetNewDocumentInfo((BlittableJsonReaderObject)res.Results[0]);
                var r            = _session.TrackEntity <T>(documentInfo);

                Result = (r, etag);
                return;
            }

            Result = null;
            _session.RegisterMissing(_id);
        }
        public override void SetResponse(JsonOperationContext context, BlittableJsonReaderObject response, bool fromCache)
        {
            if (response == null)
            {
                Result = null;
                return;
            }

            if (fromCache)
            {
                // we have to clone the response here because  otherwise the cached item might be freed while
                // we are still looking at this result, so we clone it to the side
                response = response.Clone(context);
            }

            Result = JsonDeserializationClient.ConditionalGetResult(response);
        }