parseRetryAfter function

Duration? parseRetryAfter(
  1. String? value, {
  2. DateTime? now,
})

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