public Error Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { switch (reader.GetCurrentJsonToken()) { case JsonToken.String: { var error = new Error { Reason = reader.ReadString() }; return(error); } case JsonToken.BeginObject: { var formatter = formatterResolver.GetFormatter <Dictionary <string, object> >(); var dict = formatter.Deserialize(ref reader, formatterResolver); var error = new Error(); error.FillValues(dict); if (dict.TryGetValue("caused_by", out var causedBy)) { error.CausedBy = formatterResolver.ReserializeAndDeserialize <ErrorCause>(causedBy); } if (dict.TryGetValue("headers", out var headers)) { var d = formatterResolver.ReserializeAndDeserialize <Dictionary <string, string> >(headers); if (d != null) { error.Headers = new ReadOnlyDictionary <string, string>(d); } } error.Metadata = ErrorCause.ErrorCauseMetadata.CreateCauseMetadata(dict, formatterResolver); return(ReadRootCause(dict, formatterResolver, error)); } default: reader.ReadNextBlock(); return(null); } }
private static IReadOnlyCollection <ShardFailure> GetShardFailures(object value, IJsonFormatterResolver formatterResolver) { if (!(value is List <object> objects)) { return(DefaultFailedShards); } var values = new List <ShardFailure>(); foreach (var v in objects) { var cause = formatterResolver.ReserializeAndDeserialize <ShardFailure>(v); if (cause != null) { values.Add(cause); } } return(new ReadOnlyCollection <ShardFailure>(values.ToArray())); }
// TODO: Optimize this public ServerError Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { var formatter = formatterResolver.GetFormatter <Dictionary <string, object> >(); var dict = formatter.Deserialize(ref reader, formatterResolver); var statusCode = -1; if (dict.TryGetValue("status", out var status)) { statusCode = Convert.ToInt32(status); } if (!dict.TryGetValue("error", out var error)) { return(null); } var err = formatterResolver.ReserializeAndDeserialize <Error>(error); return(new ServerError(err, statusCode)); }
public ShardFailure Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { var failure = new ShardFailure(); if (reader.GetCurrentJsonToken() != JsonToken.BeginObject) { reader.ReadNextBlock(); return(failure); } var formatter = formatterResolver.GetFormatter <Dictionary <string, object> >(); var dict = formatter.Deserialize(ref reader, formatterResolver); if (dict.TryGetValue("shard", out var shard)) { failure.Shard = Convert.ToInt32(shard); } if (dict.TryGetValue("index", out var index)) { failure.Index = Convert.ToString(index); } if (dict.TryGetValue("node", out var node)) { failure.Node = Convert.ToString(node); } if (dict.TryGetValue("status", out var status)) { failure.Status = Convert.ToString(status); } if (dict.TryGetValue("reason", out var reason)) { var cause = formatterResolver.ReserializeAndDeserialize <ErrorCause>(reason); failure.Reason = cause; } return(failure); }
public ErrorCause Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { var token = reader.GetCurrentJsonToken(); switch (token) { case JsonToken.BeginObject: { var formatter = formatterResolver.GetFormatter <Dictionary <string, object> >(); var dict = formatter.Deserialize(ref reader, formatterResolver); var errorCause = new ErrorCause(); errorCause.FillValues(dict); if (dict.TryGetValue("caused_by", out var causedBy)) { errorCause.CausedBy = formatterResolver.ReserializeAndDeserialize <ErrorCause>(causedBy); } errorCause.Metadata = ErrorCause.ErrorCauseMetadata.CreateCauseMetadata(dict, formatterResolver); return(errorCause); } case JsonToken.String: { var errorCause = new ErrorCause { Reason = reader.ReadString() }; return(errorCause); } default: reader.ReadNextBlock(); return(null); } }