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