in src/Elastic.Clients.Elasticsearch/_Shared/Core/DateTime/Duration.cs [108:156]
private void ParseExpression(string timeUnit)
{
var match = ExpressionRegex.Match(timeUnit);
if (!match.Success)
throw new ArgumentException($"Expression '{timeUnit}' is invalid", nameof(timeUnit));
var factor = match.Groups["factor"].Value;
if (!double.TryParse(factor, NumberStyles.Any, CultureInfo.InvariantCulture, out var f))
throw new ArgumentException($"Expression '{timeUnit}' contains invalid factor: {factor}", nameof(timeUnit));
Factor = f;
var interval = match.Groups["interval"].Success ? match.Groups["interval"].Value : null;
if (!string.IsNullOrEmpty(interval))
{
switch (interval.ToLowerInvariant())
{
case "m":
Interval = TimeUnit.Minutes;
break;
case "s":
Interval = TimeUnit.Seconds;
break;
case "ms":
Interval = TimeUnit.Milliseconds;
break;
case "ns":
Interval = TimeUnit.Nanoseconds;
break;
case "h":
Interval = TimeUnit.Hours;
break;
case "d":
Interval = TimeUnit.Days;
break;
case "micros":
Interval = TimeUnit.Microseconds;
break;
case "nanos":
Interval = TimeUnit.Nanoseconds;
break;
}
}
if (!Interval.HasValue)
throw new ArgumentException($"Expression '{interval}' cannot be parsed to an interval", nameof(timeUnit));
Milliseconds = GetExactMilliseconds(Factor.Value, Interval.Value);
}