in src/Elastic.Transport/Components/Serialization/Converters/ErrorCauseConverter.cs [41:138]
public override TErrorCause Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartObject)
{
return reader.TokenType == JsonTokenType.String
? new TErrorCause { Reason = reader.GetString() }
: null;
}
var errorCause = new TErrorCause();
var additionalProperties = new Dictionary<string, object>();
errorCause.AdditionalProperties = additionalProperties;
void ReadAssign<T>(ref Utf8JsonReader r, Action<ErrorCause, T> set) =>
set(errorCause, JsonSerializer.Deserialize<T>(ref r, options));
void ReadAny(ref Utf8JsonReader r, string property, Action<ErrorCause, string, object> set) =>
set(errorCause, property, JsonSerializer.Deserialize<object>(ref r, options));
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndObject) return errorCause;
if (reader.TokenType != JsonTokenType.PropertyName) throw new JsonException();
var propertyName = reader.GetString();
switch (propertyName)
{
//case "bytes_limit":
// ReadAssign<int?>(ref reader, (e, v) => e.BytesLimit = v);
// break;
//case "bytes_wanted":
// ReadAssign<int?>(ref reader, (e, v) => e.BytesWanted = v);
// break;
case "caused_by":
ReadAssign<ErrorCause>(ref reader, (e, v) => e.CausedBy = v);
break;
//case "col":
// ReadAssign<int?>(ref reader, (e, v) => e.Column = v);
// break;
//case "failed_shards":
// ReadAssign<IReadOnlyCollection<ShardFailure>>(ref reader, (e, v) => e.FailedShards = v);
// break;
//case "grouped":
// ReadAssign<bool?>(ref reader, (e, v) => e.Grouped = v);
// break;
case "index":
ReadAssign<string>(ref reader, (e, v) => e.Index = v);
break;
case "index_uuid":
ReadAssign<string>(ref reader, (e, v) => e.IndexUUID = v);
break;
//case "lang":
// ReadAssign<string>(ref reader, (e, v) => e.Language = v);
// break;
//case "license.expired.feature":
// ReadAssign<string>(ref reader, (e, v) => e.LicensedExpiredFeature = v);
// break;
//case "line":
// ReadAssign<int?>(ref reader, (e, v) => e.Line = v);
// break;
//case "phase":
// ReadAssign<string>(ref reader, (e, v) => e.Phase = v);
// break;
case "reason":
ReadAssign<string>(ref reader, (e, v) => e.Reason = v);
break;
//case "resource.id":
// errorCause.ResourceId = ReadSingleOrCollection(ref reader, options);
// break;
//case "resource.type":
// ReadAssign<string>(ref reader, (e, v) => e.ResourceType = v);
// break;
//case "script":
// ReadAssign<string>(ref reader, (e, v) => e.Script = v);
// break;
//case "script_stack":
// errorCause.ScriptStack = ReadSingleOrCollection(ref reader, options);
// break;
//case "shard":
// errorCause.Shard = ReadIntFromString(ref reader, options);
// break;
case "stack_trace":
ReadAssign<string>(ref reader, (e, v) => e.StackTrace = v);
break;
case "type":
ReadAssign<string>(ref reader, (e, v) => e.Type = v);
break;
default:
if (ReadMore(ref reader, options, propertyName, errorCause)) break;
else
{
ReadAny(ref reader, propertyName, (e, p, v) => additionalProperties.Add(p, v));
break;
}
}
}
return errorCause;
}