public DisqusApiResponse(ApplicationRateLimit rateLimit, int code, Either <ErrorResponseMessage, T> response) { RateLimit = rateLimit; Code = code; Response = response; }
public Either <ErrorResponseMessage, DisqusApiResponse <T> > Request <T>(DisqusRequest <T> request) { _disqusRequester.AccessToken = _accessToken; _disqusRequester.PublicKey = _publicKey; IDisqusResponseMessage result = _disqusRequester.Request(request); if (result.ApplicationRateLimit.IsNone) { return(Left <ErrorResponseMessage, DisqusApiResponse <T> >(new ErrorResponseMessage(result.Body))); } DisqusApiResponse <T> apiResponse; int code = -1; ApplicationRateLimit rateLimit = null; result.ApplicationRateLimit.Match( Some: v => rateLimit = v, None: () => { }); T deserialized = default(T); JObject jsonBody = null; try { jsonBody = JObject.Parse(result.Body); var codeFragment = jsonBody["code"]; if (codeFragment != null) { code = (int)codeFragment; } MemoryTraceWriter traceWriter = new MemoryTraceWriter(); deserialized = JsonConvert.DeserializeObject <T>(result.Body, new JsonSerializerSettings { Formatting = Formatting.Indented, MissingMemberHandling = ApplyStrictResponseParsing ? MissingMemberHandling.Error : MissingMemberHandling.Ignore, TraceWriter = traceWriter }); apiResponse = new DisqusApiResponse <T>(rateLimit, code, Right <ErrorResponseMessage, T>(deserialized)); } catch (Exception ex) { string errorMessage = "Unknown error"; var codeFragment = jsonBody?["response"]; if (codeFragment != null) { errorMessage = (string)codeFragment; } apiResponse = new DisqusApiResponse <T>(rateLimit, code, Left <ErrorResponseMessage, T>(new ErrorResponseMessage(errorMessage) { Exception = ex })); } return(apiResponse); }
public DisqusResponseMessage(HttpResponseMessage httpResponseMessage) { HttpContent body = null; HttpResponseHeaders headers = null; ApplicationRateLimit applicationRateLimit = null; try { body = httpResponseMessage.Content; headers = httpResponseMessage.Headers; IEnumerable <string> values; int rateLimitRemaining = -1; if (headers.TryGetValues("X-Ratelimit-Remaining", out values)) { if (!int.TryParse(values.First(), out rateLimitRemaining)) { rateLimitRemaining = -1; } } int rateLimitLimit = -1; if (headers.TryGetValues("X-Ratelimit-Limit", out values)) { if (!int.TryParse(values.First(), out rateLimitLimit)) { rateLimitLimit = -1; } } int rateLimitReset = -1; if (headers.TryGetValues("X-Ratelimit-Reset", out values)) { if (!int.TryParse(values.First(), out rateLimitReset)) { rateLimitReset = -1; } } applicationRateLimit = new ApplicationRateLimit(rateLimitRemaining, rateLimitLimit, rateLimitReset); // Try getting out first bit of json to see what code is // If code is zero then we should try and deserialize the whole object var jsonBody = body.ReadAsStringAsync(); jsonBody.Wait(); Body = jsonBody.Result; } catch { } finally { if (applicationRateLimit != null) { ApplicationRateLimit = Some(applicationRateLimit); } } }