public override TErrorCause Read()

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;
	}