Beispiel #1
0
        public CollectionResponse <TEntity, TMeta> DecodeResponse(TransportResponse transportResponse)
        {
            List <TEntity>     elements;
            CollectionMetadata paging = null;
            TMeta metadata            = null;

            object output;

            // Decode elements
            if (transportResponse.data.TryGetValue("elements", out output))
            {
                try
                {
                    elements = (output as List <object>)
                               .Select(element => DataUtil.BuildRecord <TEntity>((Dictionary <string, object>)element))
                               .ToList();
                }
                catch
                {
                    throw new InvalidCastException("Error decoding elements from TransportResponse.");
                }
            }
            else
            {
                throw new KeyNotFoundException("Could not find elements in TransportResponse.");
            }

            // Decode paging (optional)
            if (transportResponse.data.TryGetValue("paging", out output))
            {
                try
                {
                    paging = DataUtil.BuildRecord <CollectionMetadata>((Dictionary <string, object>)output);
                }
                catch
                {
                    throw new InvalidCastException("Error decoding paging data from TransportResponse.");
                }
            }

            // Decode metadata (optional)
            if (transportResponse.data.TryGetValue("metadata", out output))
            {
                try
                {
                    metadata = DataUtil.BuildRecord <TMeta>((Dictionary <string, object>)output);
                }
                catch
                {
                    throw new InvalidCastException("Error decoding metadata from TransportResponse.");
                }
            }

            return(new CollectionResponse <TEntity, TMeta>(transportResponse.responseHeaders, transportResponse.status ?? 200, elements, paging, metadata));
        }
        public EntityResponse <TEntity> DecodeResponse(TransportResponse transportResponse)
        {
            TEntity record = null;
            Dictionary <string, object> dataMap = transportResponse.data;

            if (dataMap != null)
            {
                record = DataUtil.BuildRecord <TEntity>(dataMap);
            }
            return(new EntityResponse <TEntity>(transportResponse.responseHeaders, transportResponse.status ?? 200, record));
        }
Beispiel #3
0
        public ClientErrorResponse DecodeResponse(TransportResponse transportResponse)
        {
            ErrorResponse data = null;
            Dictionary <string, object> dataMap = transportResponse.data;

            if (dataMap != null && transportResponse.headers.ContainsKey(RestConstants.kHeaderRestliErrorResponse))
            {
                data = DataUtil.BuildRecord <ErrorResponse>(dataMap);
                transportResponse.error.details = data;
                transportResponse.status        = data.status;
            }
            return(new ClientErrorResponse(transportResponse.responseHeaders, transportResponse.status ?? RestConstants.httpStatusInternalServerError, transportResponse.error));
        }