parseRetryAfter function
Parses a Retry-After header value into a Duration.
Supports both forms defined by RFC 9110 (and handled by pi's
getRetryAfterDelayMs): delta-seconds ("120") and an HTTP date
("Wed, 21 Oct 2015 07:28:00 GMT", also ISO-8601 as a fallback). The
result is clamped to be non-negative. Returns null for absent or
unparseable values.
Implementation
Duration? parseRetryAfter(String? value, {DateTime? now}) {
if (value == null) {
return null;
}
final trimmed = value.trim();
final seconds = int.tryParse(trimmed);
if (seconds != null) {
return Duration(seconds: seconds < 0 ? 0 : seconds);
}
final date = _parseHttpDate(trimmed) ?? DateTime.tryParse(trimmed);
if (date == null) {
return null;
}
final delta = date.difference(now ?? DateTime.now());
return delta.isNegative ? Duration.zero : delta;
}