parseGoDuration function
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);
}