public static DateMath FromString()

in src/Elastic.Clients.Elasticsearch/_Shared/Core/DateTime/DateMath/DateMath.cs [48:90]


	public static DateMath FromString(string dateMath)
	{
		if (dateMath == null)
			return null;

		var match = DateMathRegex.Match(dateMath);
		if (!match.Success)
			throw new ArgumentException($"Cannot create a {nameof(DateMathExpression)} out of '{dateMath}'");

		var math = new DateMathExpression(match.Groups["anchor"].Value);

		if (match.Groups["ranges"].Success)
		{
			var rangeString = match.Groups["ranges"].Value;
			do
			{
				var nextRangeStart = rangeString.Substring(1).IndexOfAny(new[] { '+', '-', '/' });
				if (nextRangeStart == -1)
					nextRangeStart = rangeString.Length - 1;
				var unit = rangeString.Substring(1, nextRangeStart);
				if (rangeString.StartsWith("+", StringComparison.Ordinal))
				{
					math = math.Add(unit);
					rangeString = rangeString.Substring(nextRangeStart + 1);
				}
				else if (rangeString.StartsWith("-", StringComparison.Ordinal))
				{
					math = math.Subtract(unit);
					rangeString = rangeString.Substring(nextRangeStart + 1);
				}
				else
					rangeString = null;
			} while (!rangeString.IsNullOrEmpty());
		}

		if (match.Groups["rounding"].Success)
		{
			var rounding = match.Groups["rounding"].Value.Substring(1).ToEnum<DateMathTimeUnit>(StringComparison.Ordinal);
			if (rounding.HasValue)
				return math.RoundTo(rounding.Value);
		}
		return math;
	}