parseGoDuration function

Duration? parseGoDuration(
  1. String text
)

The Duration a Go duration string ('30m', '1h30m', '1.5s') is, or null when text is not one, or is finer than a microsecond.

Implementation

Duration? parseGoDuration(String text) {
  if (!_goDuration.hasMatch(text)) return null;
  var nanos = 0;
  for (final m in _goDurationPart.allMatches(text)) {
    final unit = _unitNanos[m[3]]!;
    final fraction = m[2] ?? '';
    final scale = _pow10(fraction.length);
    final part = (fraction.isEmpty ? 0 : int.parse(fraction)) * unit;
    if (part % scale != 0) return null;
    nanos += int.parse(m[1]!) * unit + part ~/ scale;
  }
  if (nanos % 1000 != 0) return null;
  return Duration(microseconds: nanos ~/ 1000);
}